Java中找出List集合中属性名为key属性值为value的对象

   日期:2020-08-29     浏览:122    评论:0    
核心提示:前言:在日常开发中,我们需要从一个 List 集合中找出其中某一个对象,下面就介绍如何从 List 集合中找出属性名为 key 属性值为 value 的对象1、方法 getObjectByKeyAndValueprivate static T g

前言:在日常开发中,我们需要从一个 List 集合中找出其中某一个对象,下面就介绍如何从 List 集合中找出属性名为 key 属性值为 value 的对象

1、方法 getObjectByKeyAndValue


private static <T> T getObjectByKeyAndValue(List<T> list, String key, String value) {
    if (null == list || list.isEmpty() || StringUtils.isEmpty(key) || StringUtils.isEmpty(value)) {
        return null;
    }
    for (T item : list) {
        try {
        	// 获取当前类
            Class cls = item.getClass();
            // 获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段
            Field[] fields = cls.getDeclaredFields();
            for (int i = 0; i < fields.length; i++) {
                Field f = fields[i];
                // 当未设置Field的setAccessible方法为true时,会在调用的时候进行访问安全检查,会抛出IllegalAccessException异常
                f.setAccessible(true);
                // 获取字段的名称
                String name = f.getName();
                // 如果key相等
                if (key.equals(name)) {
                    // 如果值相等
                    if (f.get(item).equals(value)) {
                        // 返回对应的类,结束循环
                        return item;
                    }
                    // 否则直接结束当前循环
                    else {
                        break;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return null;
}
  • getClass(),我们通过反射,获取当前类
  • getDeclaredFields,获取当前类所有声明字段
  • setAccessible(true),这一步是有必要的,会在调用的时候进行访问安全检查,会抛出IllegalAccessException异常
  • getName(),获取字段名,跟我们传入的 key 进行比较
  • 再获取属性值跟我们传入的 value 进行比较

2、测试

public static void main(String[] args) {
    List<User> list = new ArrayList<>();
    User user = new User(2, "rose", 18);
    User user1 = new User(1, "jack", 20);
    list.add(user);
    list.add(user1);
    System.out.println(getObjectByKeyAndValue(list, "name", "jack"));
}

我们在 List 集合中传入了两个对象,然后我们需要找出 name 为 jack 的对象

打印结果

这样,我们就找出了 name 为 jack 的对象

如您在阅读中发现不足,欢迎留言!!!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服