zoukankan      html  css  js  c++  java
  • 【Java】利用json工具类,传入字段名,获取集合中的对象属性值集合

      经常需要在对象集合中,将某个对象的一个或多个属性值抽出来扔到一个集合中。代码如下:

      一个属性值:

            Set<Integer> set = new HashSet<>();
            for (User user : users) {
                set.add(user.getId());
            }

      多个属性值:

            List<Map<String, Object>> list = new ArrayList<>();
            for (User user : users) {
                Map<String, Object> map = new HashMap<>();
                map.put("id", user.getId());
                map.put("name", user.getName());
                list.add(map);
            }

      

      现在写一个利用json工具类,传入字段名,获取集合中的对象属性值集合的工具类。

      1. 添加json依赖

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>${fastjson.version}</version>
    </dependency>

      2.工具类

    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    import java.util.*;
    
    /**
     *@Author: lzf
     *@Date: 2020/4/8 10:58
     *@Description: 通过字段名,将集合中的值抽出。利用阿里巴巴json工具类,未直接使用反射
     */
    public class PropertyUtil {
    
        /**
         * 描述: 通过字段名,将集合中的值抽出,放在Set<String>集合中
         * @param collection 资源集合
         * @param property 目标字段名
         * @return java.util.Set<java.lang.String>
         * @date: 2020/4/8 14:10
         */
        public static Set<String> getStringValueSet(Collection<?> collection, String property) {
            Set<String> paramSet = new HashSet<>();
            if (collection != null && !collection.isEmpty()) {
                JSONArray array = (JSONArray) JSONObject.toJSON(collection);
                for (int i = 0; i < array.size(); i++) {
                    JSONObject object = array.getJSONObject(i);
                    if (object.getString(property) != null) {
                        paramSet.add(object.getString(property));
                    }
                }
            }
            return paramSet;
        }
    
        /**
         * 描述: 通过字段名,将集合中的值抽出,放在Set<Integer>集合中
         * @param collection 资源集合
         * @param property 目标字段名
         * @return java.util.Set<java.lang.Integer>
         * @date: 2020/4/8 14:09
         */
        public static Set<Integer> getIntegerValueSet(Collection<?> collection, String property) {
            Set<Integer> paramSet = new HashSet<>();
            if (collection != null && !collection.isEmpty()) {
                JSONArray array = (JSONArray) JSONObject.toJSON(collection);
                for (int i = 0; i < array.size(); i++) {
                    JSONObject object = array.getJSONObject(i);
                    if (object.getInteger(property) != null) {
                        paramSet.add(object.getInteger(property));
                    }
                }
            }
            return paramSet;
        }
    
        /**
         * 描述:将对象的属性值放在map中
         *      return [{"id",123,"name":"张三","status":"1"},{...}]
         * @param collection 资源集合
         * @param properties 目标字段名
         * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
         * @date: 2020/4/8 14:09
         */
        public static List<Map<String, Object>> getStringPropertyMap(Collection<?> collection, String... properties) {
            List<Map<String, Object>> dataList = new ArrayList<>();
            if (collection != null && !collection.isEmpty()) {
                JSONArray array = (JSONArray) JSONObject.toJSON(collection);
                for (int i = 0; i < array.size(); i++) {
                    JSONObject object = array.getJSONObject(i);
                    Map<String, Object> map = new HashMap<>();
                    for (String property : properties) {
                        map.put(property, object.get(property));
                    }
                    if (!map.isEmpty()) {
                        dataList.add(map);
                    }
                }
            }
            return dataList;
        }
    }

      3.新建一个对象User用来测试

    /**
     * @Author: lzf
     * @Date: 2020/4/8 11:38
     * @Description: 测试对象
     */
    public class User {
        private Integer id;
        private String name;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

      4.生成测试类

    import java.util.*;
    
    /**
     * @Author: lzf
     * @Date: 2020/4/8 11:37
     * @Description:
     */
    public class PropertyUtilTest {
    
        public static void main(String[] args) {
            List<User> users = initUserList();
    
            System.out.println("Integer属性:" + PropertyUtil.getIntegerValueSet(users, "id").toString());
            System.out.println("String属性:" + PropertyUtil.getStringValueSet(users, "name").toString());
            System.out.println("String属性Map:" + PropertyUtil.getStringPropertyMap(users, "id", "name").toString());
        }
    
        /**
         * 描述:生成 测试数据
         * @param
         * @return java.util.List<User>
         * @date: 2020/4/8 14:36
         */
        private static List<User> initUserList() {
            List<User> list = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                User user = new User();
                user.setId(i);
                user.setName("User_" + i);
                list.add(user);
            }
            return list;
        }
    }

      5.输出

    Integer属性:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    String属性:[User_4, User_5, User_6, User_7, User_8, User_9, User_0, User_1, User_2, User_3]
    String属性Map:[{name=User_0, id=0}, {name=User_1, id=1}, {name=User_2, id=2}, {name=User_3, id=3}, {name=User_4, id=4}, {name=User_5, id=5}, {name=User_6, id=6}, {name=User_7, id=7}, {name=User_8, id=8}, {name=User_9, id=9}]

      简单的写了三个方法,如果有其他需求可以自行完善修改代码。


  • 相关阅读:
    Linux并发与同步专题 (1)原子操作和内存屏障
    Linux并发与同步专题
    功耗案例分析:周期性底电流抬高问题分析和解决
    Android OpenGL 基础入门
    使用Codeblock搭建Windows下Objec-c学习环境
    Muduo 多线程模型对比
    NPTL 线程同步方式
    C++ 封装互斥对象
    Java 常用字符串操作总结
    Android 开发有用代码积累
  • 原文地址:https://www.cnblogs.com/Aeons/p/12659978.html
Copyright © 2011-2022 走看看