欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java對象和Map之間相互轉(zhuǎn)換的五種方法

 更新時間:2025年02月12日 10:43:46   作者:hhzz  
在Java開發(fā)中,經(jīng)常需要將Java對象轉(zhuǎn)換成Map,或者反過來將Map轉(zhuǎn)換成Java對象,這種轉(zhuǎn)換在很多場景下都非常有用,比如在序列化和反序列化過程中、在數(shù)據(jù)傳輸和持久化時、或者在進行對象屬性的批量操作時,本文將介紹幾種不同的方法來實現(xiàn)Java對象和Map之間的相互轉(zhuǎn)換

引言

在Java開發(fā)中,經(jīng)常需要將Java對象轉(zhuǎn)換成Map,或者反過來將Map轉(zhuǎn)換成Java對象。這種轉(zhuǎn)換在很多場景下都非常有用,比如在序列化和反序列化過程中、在數(shù)據(jù)傳輸和持久化時、或者在進行對象屬性的批量操作時。

本文將介紹幾種不同的方法來實現(xiàn)Java對象和Map之間的相互轉(zhuǎn)換,選擇哪種方法取決于項目的具體需求和個人偏好。

一、使用Spring Framework的ReflectionUtils

1.1、Bean轉(zhuǎn)為Map

 @Test
    public void bean2Map(){
        Person person=new Person();
        person.setName("tiger");
        person.setAge(18);
        person.setAddress("中國");
        person.setCity("深圳");
        System.out.println(person);
        System.out.println(bean2Map(person));
        System.out.println(bean2Map2(person));
    }


    public static Map<String, Object> bean2Map(Object object) {
        Map<String, Object> map = new HashMap<>();
        ReflectionUtils.doWithFields(object.getClass(), field -> {
            field.setAccessible(true);
            Object value = ReflectionUtils.getField(field, object);
            if (value != null) {
                map.put(field.getName(), value);
            }
        });
        return map;
    }
    public static Map<String, Object> bean2Map2(Object object) {
        Map<String, Object> map = new HashMap<>();
        Class<?> clazz = object.getClass();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                Object value = field.get(object);
                if (value != null) {
                    map.put(field.getName(), value);
                }
            } catch (IllegalAccessException e) {
                throw new RuntimeException("Error accessing field: " + field.getName(), e);
            }
        }
        return map;
    }

結(jié)果輸出:

在這里插入圖片描述

1.2、Map轉(zhuǎn)為Bean

@Test
    public void map2bean() throws IllegalAccessException, InstantiationException {
        Map<String, Object> map = new HashMap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中國");
        map.put("city", "北京");
        System.out.println(map);
        System.out.println(map2Bean(map, Person.class));
        System.out.println(map2Bean2(map, Person.class));
    }

    public static <T> T map2Bean(Map<String, Object> map, Class<T> clazz) throws IllegalAccessException, InstantiationException {
        T instance = clazz.newInstance();
        ReflectionUtils.doWithFields(clazz, field -> {
            field.setAccessible(true);
            if (map.containsKey(field.getName())) {
                ReflectionUtils.setField(field, instance, map.get(field.getName()));
            }
        });
        return instance;
    }

    public static <T> T map2Bean2(Map<String, Object> map, Class<T> clazz) throws IllegalAccessException, InstantiationException {
        T instance = clazz.newInstance();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            if (map.containsKey(field.getName())) {
                field.set(instance, map.get(field.getName()));
            }
        }
        return instance;
    }

結(jié)果輸出:

在這里插入圖片描述

二、使用Hutool工具

2.1、引入hutool依賴

		<dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-all</artifactId>
			<version>5.5.9</version>
		</dependency>

2.2、Bean轉(zhuǎn)為Map

    @Test
    public void bean2Map(){
        Person person=new Person();
        person.setName("tiger");
        person.setAge(18);
        person.setAddress("中國");
        person.setCity("深圳");

        Map<String, Object> map = BeanUtil.beanToMap(person);

        System.out.println(person);
        System.out.println(bean2Map(person));
        System.out.println(bean2Map2(person));

        System.out.println(map);
    }

結(jié)果輸出:

在這里插入圖片描述

2.3、Map轉(zhuǎn)為Bean

    @Test
    public void map2bean() throws IllegalAccessException, InstantiationException {
        Map<String, Object> map = new HashMap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中國");
        map.put("city", "北京");

        Person person = BeanUtil.toBean(map, Person.class);

        System.out.println(map);
        System.out.println(map2Bean(map, Person.class));
        System.out.println(map2Bean2(map, Person.class));

        System.out.println(person);
    }

結(jié)果輸出:

在這里插入圖片描述

三、使用Jackson工具

3.1、Bean轉(zhuǎn)為Map

    @Test
    public void bean2Map(){
        Person person=new Person();
        person.setName("tiger");
        person.setAge(18);
        person.setAddress("中國");
        person.setCity("深圳");

        Map<String, Object> map = BeanUtil.beanToMap(person);

        System.out.println(person);
        System.out.println(bean2Map(person));
        System.out.println(bean2Map2(person));

        System.out.println(map);

        System.out.println(bean2MapByjackson(person));
    }

轉(zhuǎn)換方法:

    public static Map<String, Object> bean2MapByjackson(Object object) {
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.convertValue(object, new TypeReference<Map<String, Object>>() {
        });
    }

結(jié)果輸出:

在這里插入圖片描述

3.2、Map轉(zhuǎn)為Bean

    @Test
    public void map2bean() throws IllegalAccessException, InstantiationException {
        Map<String, Object> map = new HashMap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中國");
        map.put("city", "北京");

        Person person = BeanUtil.toBean(map, Person.class);

        System.out.println(map);
        System.out.println(map2BeanByReflectionUtils(map, Person.class));
        System.out.println(map2Bean2ByReflectionUtils(map, Person.class));

        System.out.println(person);

        System.out.println(map2BeanByjackson(map, Person.class));
    }

轉(zhuǎn)換方法:

    public static <T> T map2BeanByjackson(Map<String, Object> map, Class<T> clazz){
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.convertValue(map, clazz);
    }

結(jié)果輸出:

在這里插入圖片描述

四、使用Apache Commons Lang的BeanUtils

4.1、引入依賴

		<!-- commons-lang3 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.12.0</version>
		</dependency>
		<dependency>
			<groupId>commons-beanutils</groupId>
			<artifactId>commons-beanutils</artifactId>
			<version>1.9.4</version>
		</dependency>

4.2、Bean轉(zhuǎn)為Map

轉(zhuǎn)換方法:

    public static Map<String, String> bean2MapBycommonslang3(Object object) {
        try {
            return BeanUtils.describe(object);
        } catch (Exception e) {
            throw new RuntimeException("Error converting object to map: " + e.getMessage(), e);
        }
    }
    @Test
    public void bean2Map(){
        Person person=new Person();
        person.setName("tiger");
        person.setAge(18);
        person.setAddress("中國");
        person.setCity("深圳");

        Map<String, Object> map = BeanUtil.beanToMap(person);

        System.out.println(person);
        System.out.println(bean2Map(person));
        System.out.println(bean2Map2(person));

        System.out.println(map);

        System.out.println(bean2MapByjackson(person));

        System.out.println(bean2MapBycommonslang3(person));
    }

結(jié)果輸出:

在這里插入圖片描述

4.3、Map轉(zhuǎn)為Bean

轉(zhuǎn)換方法:

    public static <T> T map2BeanBycommonslang3(Map<String, ?> map, Class<T> clazz) {
        try {
            T instance = clazz.newInstance();
            BeanUtils.populate(instance, map);
            return instance;
        } catch (Exception e) {
            throw new RuntimeException("Error converting map to object: " + e.getMessage(), e);
        }
    }
    @Test
    public void map2bean() throws IllegalAccessException, InstantiationException {
        Map<String, Object> map = new HashMap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中國");
        map.put("city", "北京");

        Person person = BeanUtil.toBean(map, Person.class);

        System.out.println(map);
        System.out.println(map2BeanByReflectionUtils(map, Person.class));
        System.out.println(map2Bean2ByReflectionUtils(map, Person.class));

        System.out.println(person);

        System.out.println(map2BeanByjackson(map, Person.class));

        System.out.println(map2BeanBycommonslang3(map, Person.class));
    }

結(jié)果輸出:

在這里插入圖片描述

五、使用fastjson工具

5.1、 引入fastjson依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

5.2、 Bean轉(zhuǎn)為Map

    @Test
    public void bean2Map(){
        Person person=new Person();
        person.setName("tiger");
        person.setAge(18);
        person.setAddress("中國");
        person.setCity("深圳");

        Map<String, Object> map = BeanUtil.beanToMap(person);

        System.out.println(person);
        System.out.println(bean2Map(person));
        System.out.println(bean2Map2(person));

        System.out.println(map);

        System.out.println(bean2MapByjackson(person));

        System.out.println(bean2MapBycommonslang3(person));

        System.out.println(JSONObject.parseObject(JSONObject.toJSONString(person)));
    }

結(jié)果輸出:

在這里插入圖片描述

5.3、 Map轉(zhuǎn)為Bean

    @Test
    public void map2bean() throws IllegalAccessException, InstantiationException {
        Map<String, Object> map = new HashMap();
        map.put("name", "tigerhhzz");
        map.put("age", 18);
        map.put("address","中國");
        map.put("city", "北京");

        Person person = BeanUtil.toBean(map, Person.class);

        System.out.println(map);
        System.out.println(map2BeanByReflectionUtils(map, Person.class));
        System.out.println(map2Bean2ByReflectionUtils(map, Person.class));

        System.out.println(person);

        System.out.println(map2BeanByjackson(map, Person.class));

        System.out.println(map2BeanBycommonslang3(map, Person.class));

        System.out.println(JSONObject.parseObject(JSONObject.toJSONString(map), Person.class));
    }

結(jié)果輸出:

在這里插入圖片描述

以上就是Java對象和Map之間相互轉(zhuǎn)換的五種方法的詳細(xì)內(nèi)容,更多關(guān)于Java對象和Map互轉(zhuǎn)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論