当前位置: 移动技术网 > IT编程>开发语言>Java > 【Java】利用json工具类,传入字段名,获取集合中的对象属性值集合

【Java】利用json工具类,传入字段名,获取集合中的对象属性值集合

2020年04月08日  | 移动技术网IT编程  | 我要评论

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

  一个属性值:

        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}]

 

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

 


如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网