list对象_Java找出List中属性名为key属性值为value的对象

本文介绍了一种使用反射机制从List集合中查找特定属性值的方法,适用于任何拥有指定属性的Java对象,并提供了具体实现代码及测试案例。

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

1、方法 getObjectByKeyAndValue

/** * 在一个实体list中,找出属性是key,值为value的实体 * * @param list * @param key * @param value * @param  * @return */private static  T getObjectByKeyAndValue(List 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;}1234567891011121314151617181920212223242526272829303132333435363738394041424344
  • getClass(),我们通过反射,获取当前类
  • getDeclaredFields,获取当前类所有声明字段
  • setAccessible(true),这一步是有必要的,会在调用的时候进行访问安全检查,会抛出IllegalAccessException异常
  • getName(),获取字段名,跟我们传入的 key 进行比较
  • 再获取属性值跟我们传入的 value 进行比较

2、测试

public static void main(String[] args) {    List 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"));}12345678

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

打印结果

509de52f5985d3277048109bdf9c7040.png


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值