Java基础-List<Map>转化为List<JavaBean>

说明

本例子提供几种:

  • List对象转化为List

  • javabean转换为map

  • list转换为List

  • map转为javabean

实体类:

public class City {

    /**
     * 城市编号
     */
    private Integer id;

    /**
     * 省份编号
     */
    private String provinceId;

    /**
     * 城市名称
     */
    private String cityName;
    /**
     * 描述
     */
    private String description;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getProvinceId() {
        return provinceId;
    }

    public void setProvinceId(String provinceId) {
        this.provinceId = provinceId;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
}

测试类:

public static void main(String[] args) throws Exception {
        City city=new City();
        city.setDescription("测试");
        city.setCityName("城市");
        city.setId(1);
        city.setProvinceId("省份编号");
        //javabean转换为map
        Map<String,Object> map=MyListMapUtil.convertBean2Map(city);
        map.forEach((k,v)->{
            System.out.println("key:"+k+"value:"+v);
        });
        System.out.println("--------------------");
        //list<javabean>转换为List<Map>
        List<Object> list=new ArrayList<>();
        list.add(city);
        List<Map<String,Object>> mp= MyListMapUtil.convertListBean2ListMap(list);
        for(int i=0;i<mp.size();i++){
            Map<String,Object> one=mp.get(i);
            one.forEach ((k,v)->{
                System.out.println("key:"+k+"value:"+v);
            });
        }
        System.out.println("=============");
        //List<Map>对象转化为List<JavaBean>,convertListMap2ListBean
        List<Map<String,Object>> aa=new ArrayList<>();
        Map<String,Object> two=new HashMap<String, Object>();
        two.put("id","1");
        two.put("provinceId","河南");
        two.put("cityName","郑州");
        two.put("description","成功");
        aa.add(two);
        List<City> bb=MyListMapUtil.convertListMap2ListBean(aa,City.class);
        for(City cc:bb){
            System.out.println(cc.getCityName());
        }
        System.out.println("==============");
        //map转为javabean,convertMap2Bean
        Map<String,String> pp=new HashMap<>();
        pp.put("id","1");
        pp.put("provinceId","首都");
        pp.put("cityName","北京");
        pp.put("description","成功");
       City kk= MyListMapUtil.convertMap2Bean(pp,City.class);
        System.out.println(kk.getCityName());
    }

工具类

import net.sppan.base.entity.City;
import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;

public class MyListMapUtil {
    /**
     * 将 Map对象转化为JavaBean
     * @author loulan
     * @param map
     * @return Object对象
     */
    public static <T> T convertMap2Bean(Map map, Class T) throws Exception {
        if(map==null || map.size()==0){
            return null;
        }
        BeanInfo beanInfo = Introspector.getBeanInfo(T);
        T bean = (T)T.newInstance();
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (int i = 0, n = propertyDescriptors.length; i <n ; i++) {
            PropertyDescriptor descriptor = propertyDescriptors[i];
            String propertyName = descriptor.getName();
            //将字母大写,这里先注掉,因为本例子直接读取名字匹配即可。
            //String upperPropertyName = propertyName.toUpperCase();
            if (map.containsKey(propertyName)) {
                Object value = map.get(propertyName);
                //这个方法不会报参数类型不匹配的错误。
                BeanUtils.copyProperty(bean, propertyName, value);
//用这个方法对int等类型会报参数类型不匹配错误,需要我们手动判断类型进行转换,比较麻烦。
//descriptor.getWriteMethod().invoke(bean, value);
//用这个方法对时间等类型会报参数类型不匹配错误,也需要我们手动判断类型进行转换,比较麻烦。
//BeanUtils.setProperty(bean, propertyName, value);
            }
        }
        return bean;
    }

    /**
     * 将 JavaBean对象转化为 Map
     * @author loulan
     * @param bean 要转化的类型
     * @return Map对象
     */
    public static Map convertBean2Map(Object bean) throws Exception {
        Class type = bean.getClass();
        Map returnMap = new HashMap();
        BeanInfo beanInfo = Introspector.getBeanInfo(type);
        //PropertyDescriptor:属性描述器
        PropertyDescriptor[] propertyDescriptors = beanInfo
                .getPropertyDescriptors();
        for (int i = 0, n = propertyDescriptors.length; i <n ; i++) {
            PropertyDescriptor descriptor = propertyDescriptors[i];
            String propertyName = descriptor.getName();
            if (!propertyName.equals("class")) {
                Method readMethod = descriptor.getReadMethod();
                //利用反射
                Object result = readMethod.invoke(bean, new Object[0]);
                if (result != null) {
                    returnMap.put(propertyName, result);
                } else {
                    returnMap.put(propertyName, "");
                }
            }
        }
        return returnMap;
    }

    /**
     * 将 List<Map>对象转化为List<JavaBean>
     * @author loulan

     * @return Object对象
     */
    public static <T> List<T> convertListMap2ListBean(List<Map<String,Object>> listMap, Class T) throws Exception {
        List<T> beanList = new ArrayList<T>();
        for(int i=0, n=listMap.size(); i<n; i++){
            Map<String,Object> map = listMap.get(i);
            T bean = convertMap2Bean(map,T);
            beanList.add(bean);
        }
        return beanList;
    }

    /**
     * 将 List<JavaBean>对象转化为List<Map>
     * @author loulan
     * @return Object对象
     */
    public static List<Map<String,Object>> convertListBean2ListMap(List<Object> beanList) throws Exception {
        List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>();
        for(int i=0, n=beanList.size(); i<n; i++){
            Object bean = beanList.get(i);
            Map map = convertBean2Map(bean);
            mapList.add(map);
        }
        return mapList;
    }

    
}

参考

List转化为List
https://www.jianshu.com/p/08679d138174

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值