经常需要在对象集合中,将某个对象的一个或多个属性值抽出来扔到一个集合中。代码如下:
一个属性值:
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}]
简单的写了三个方法,如果有其他需求可以自行完善修改代码。