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

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

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

方法 getObjectByKeyAndValue

/**
 * 在一个实体list中,找出属性是key,值为value的实体
 *
 * @param list
 * @param key
 * @param value
 * @param <T>
 * @return
 */
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 进行比较。

 

测试

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 的对象。

打印结果


image.png

目录
相关文章
|
27天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
42 3
|
4天前
|
Java
Java快速入门之类、对象、方法
本文简要介绍了Java快速入门中的类、对象和方法。首先,解释了类和对象的概念,类是对象的抽象,对象是类的具体实例。接着,阐述了类的定义和组成,包括属性和行为,并展示了如何创建和使用对象。然后,讨论了成员变量与局部变量的区别,强调了封装的重要性,通过`private`关键字隐藏数据并提供`get/set`方法访问。最后,介绍了构造方法的定义和重载,以及标准类的制作规范,帮助初学者理解如何构建完整的Java类。
|
3天前
|
安全 Java
Object取值转java对象
通过本文的介绍,我们了解了几种将 `Object`类型转换为Java对象的方法,包括强制类型转换、使用 `instanceof`检查类型和泛型方法等。此外,还探讨了在集合、反射和序列化等常见场景中的应用。掌握这些方法和技巧,有助于编写更健壮和类型安全的Java代码。
27 17
|
18天前
|
Java
java代码优化:判断内聚到实体对象中和构造上下文对象传递参数
通过两个常见的java后端实例场景探讨代码优化,代码不是优化出来的,而是设计出来的,我们永远不可能有专门的时间去做代码优化,优化和设计在平时
29 15
|
1月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
49 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
60 4
|
2月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
54 2
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
《21天学通Java(第6版)》—— 1.4 属性和行为
这两者在VolcanoRobot中都有,这是今天将作为类实现的项目。该项目使用计算机模拟火山探测工具,它模仿的是NASA的“遥控机器人研究”计划中用来在火山裂缝中进行研究探测的Dante II机器人。
1876 0
|
存储 机器人 Java
《21天学通Java(第7版)》—— 1.4 属性和行为
Java类包含两种不同的信息:属性和行为。 这两者在MarsRobot中都有,这是今天将作为类实现的项目。该项目使用计算机模拟行星探测工具,灵感来自NASA喷气推进实验室(Jet Propulsion Laboratory)用来探测火星表面地质情况的火星探测车(Mars Exploration Rovers)。
1749 0

热门文章

最新文章