【Java】利用json工具类,传入字段名,获取集合中的对象属性值集合
程序员文章站
2022-05-18 18:47:21
经常需要在对象集合中,将某个对象的一个或多个属性值抽出来扔到一个集合中。代码如下: 一个属性值: Set set = new HashSet<>(); for (User user : users) { set.add(user.getId()); } 多个属性值: List
经常需要在对象集合中,将某个对象的一个或多个属性值抽出来扔到一个集合中。代码如下:
一个属性值:
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}]
简单的写了三个方法,如果有其他需求可以自行完善修改代码。