java Map与Object互转

本文介绍了一种在Java中实现对象与Map相互转换的方法,包括单个对象到Map的转换、Map到对象的转换,以及List<Map>到List<Object>的转换。通过示例代码展示了如何使用反射机制进行属性值的读取和设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    /***
     * map转换成对象
     */
    public static Object mapToObject(Map<String, Object> map, Class<?> beanClass)
            throws Exception {
        if (map == null)
            return null;

        Object obj = beanClass.newInstance();

        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
        PropertyDescriptor[] propertyDescriptors = beanInfo
                .getPropertyDescriptors();
        for (PropertyDescriptor property : propertyDescriptors) {
            Method setter = property.getWriteMethod();
            if (setter != null) {
                setter.invoke(obj, map.get(property.getName()));
            }
        }

        return obj;
    }
    /***
     * mapList转换成对象List
     */
    public static List<Object> mapListToObjectList(
            List<Map<String, Object>> mapList, Class<?> beanClass)
            throws Exception {
        if (mapList == null)
            return null;

        List<Object> objList = new ArrayList<Object>();
        for (Map<String, Object> map : mapList) {
            Object obj = beanClass.newInstance();
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo
                    .getPropertyDescriptors();
            for (PropertyDescriptor property : propertyDescriptors) {
                Method setter = property.getWriteMethod();
                if (setter != null) {
                    setter.invoke(obj, map.get(property.getName()));
                }
            }
            objList.add(obj);
        }

        return objList;
    }
    /***
     *对象 转换成 map
     */
    public static Map<String, Object> objectToMap(Object obj) throws Exception {
        if (obj == null)
            return null;

        Map<String, Object> map = new HashMap<String, Object>();

        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
        PropertyDescriptor[] propertyDescriptors = beanInfo
                .getPropertyDescriptors();
        for (PropertyDescriptor property : propertyDescriptors) {
            String key = property.getName();
            if (key.compareToIgnoreCase("class") == 0) {
                continue;
            }
            Method getter = property.getReadMethod();
            Object value = getter != null ? getter.invoke(obj) : null;
            map.put(key, value);
        }

        return map;
    }
    实体类: 
public class Users { 
     private String name; 
     private String age; 

     public String getName() { 
     return name; 
     } 
     public void setName(String name) { 
     this.name = name; 
     } 
     public String getAge() { 
     return age; 
     } 
     public void setAge(String age) { 
     this.age = age; 
     }   
} 

测试类: 
public class test { 
     public static void main(String[] args) { 
         Map&lt;String,Object&gt; map = new HashMap&lt;String,Object&gt;(); 
         map.put(&quot;name&quot;, &quot;www.ixiaocao.cn&quot;); 
         map.put(&quot;age&quot;, &quot;21&quot;); 
         Transformation t = new Transformation(); 
         try { 
             Users u = (Users) t.mapToObject(map, Users.class); 
             System.out.println(u.getName()); 
             System.out.println(u.getAge()); 
         } catch (Exception e) { 
             e.printStackTrace(); 
         } 
     } 
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值