美文网首页JavaJava 杂谈Java知识书屋
【Java工具】之CollectionUtil类(八)

【Java工具】之CollectionUtil类(八)

作者: 3d0829501918 | 来源:发表于2019-05-20 10:43 被阅读3次

    此工具类主要方法有Map对象转化为JavaBeanJavaBean对象转化为 MapList<Map>对象转化为List<JavaBean>List<JavaBean>对象转化为List<Map>等。

    一、maven依赖

    <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils-core -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils-core</artifactId>
            <version>1.8.3</version>
        </dependency>
    

    二、所需的测试类

    public class User implements Serializable {
        private String id;
        private String name;
        //省略get、set
    }
    

    三、工具类

    1、Map对象转化为JavaBean

        /**
         * 将 Map对象转化为JavaBean 
         * @author 601278
         * @param T 要转化的类型
         * @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;
        }
    

    测试:

        public static void main(String[] args) throws Exception {
            Map map = new HashMap();
            map.put("id","1");
            map.put("name","zs");
            User o = convertMap2Bean(map, User.class);
            System.out.println(o.toString());
        }
      //结果:User{id='1', name='zs'}
    

    2、JavaBean对象转化为Map

       /**
         * 将 JavaBean对象转化为 Map
         * @author 601278
         * @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[] 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;
        }
    

    测试:

        public static void main(String[] args) throws Exception {
            User user = new User();
            user.setId("1");
            user.setName("zs");
            Map map = convertBean2Map(user);
            System.out.println(map.size());
        }
    
    结果

    3、List<Map>对象转化为List<JavaBean>

        /**
         * 将 List<Map>对象转化为List<JavaBean>
         * @author 601278
         * @param T
         * @param listMap
         * @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;
        }
    

    测试:

        public static void main(String[] args) throws Exception {
            Map<String,Object> map = new HashMap<>();
            map.put("id","1");
            map.put("name","zs");
            List<Map<String,Object>> list = new ArrayList<>();
            list.add(map);
            List<Object> objects = convertListMap2ListBean(list, User.class);
            System.out.println(objects.toString());
        }
    
    结果

    4、Map键值对转换成对象(参数object形式)

       /**Map对象中的值为 name=aaa,value=bbb
         调用方法
         addProperty(map,user);
         *将自动将map中的值赋给user类
         *此方法结合Spring框架的jdbcTemplete将非
         *常有用
         * @param map 存储着名称和值集合
         * @param obj 要封装的对象
         * @return封装好的对象
         */
        public static Object addProperty(Map map,Object obj){
            //遍历所有名称
            Iterator it = map.keySet().iterator();
            while(it.hasNext()){
                //取得名称
                String name = it.next().toString();
                //取得值
                String value = map.get(name).toString();
    
                try{
                    //取得值的类形
                    Class type = PropertyUtils.getPropertyType(obj, name);
    
                    if(type!=null){
                        //设置参数
                        PropertyUtils.setProperty(obj, name,ConvertUtils.convert(value, type));
                    }
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
            return obj;
        }
    

    测试:

        public static void main(String[] args) throws Exception {
            Map map = new HashMap();
            map.put("id","1");
            map.put("name","zs");
            //User user = new User();
            Object o = addProperty(map, new User());
            System.out.println(o.toString());
        }
    
    结果

    5、List<JavaBean>对象转化为List<Map>

        /**
         * 将 List<JavaBean>对象转化为List<Map>
         * @author 601278
         * @param beanList
         * @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;
        }
    

    测试:

        public static void main(String[] args) throws Exception {
            User user = new User();
            user.setId("1");
            user.setName("zs");
    
            List<Object> list = new ArrayList<>();
            list.add(user);
            //maps的size为1,泛型Map里的size为2
            List<Map<String, Object>> maps = convertListBean2ListMap(list);
            System.out.println(maps.toString());
        }
    
    结果

    **6、List<Map>对象转化为List<JavaBean>

     /**
         *将 List<Map>对象转化为List<JavaBean>
         * @param list 值为map
         * @param obj
         * @return
         */
        public static List<Object> parse(List<Map<String,Object>> list, Class obj){
            //生成集合
            ArrayList ary = new ArrayList();
            //遍历集合中的所有数据
            for(int i = 0; i<list.size(); i++){
                try {
                    ////生成对象实历 将MAP中的所有参数封装到对象中
                    Object o = addProperty( (Map)list.get(i),obj.newInstance() );
                    //把对象加入到集合中
                    ary.add(o);
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
            //返回封装好的集合
            return ary;
        }
    

    测试:

       public static void main(String[] args) throws Exception {
            List<Map<String,Object>> list = new ArrayList();
            Map map = new HashMap();
            map.put("id","1");
            map.put("name","zs");
            list.add(map);
    
            List<Object> parse = parse(list, User.class);
            System.out.println(parse.toString());
    
        }
    
    结果

    相关文章

      网友评论

        本文标题:【Java工具】之CollectionUtil类(八)

        本文链接:https://www.haomeiwen.com/subject/hivhzqtx.html