📌  相关文章
📜  如何在Java中从 LinkedHashSet 中查找用户定义的对象?(1)

📅  最后修改于: 2023-12-03 15:08:54.624000             🧑  作者: Mango

在Java中从 LinkedHashSet 中查找用户定义的对象

LinkedHashSet 是一种基于哈希表和双向链表实现的有序集合,它可以保证元素的顺序并且不包含重复元素。当我们向 LinkedHashSet 中添加一个自定义对象时,我们需要实现该对象的 equalshashCode 方法,以便于判定对象是否相同。在本文中,我们将介绍如何在 Java 中从 LinkedHashSet 中查找用户定义的对象。

查找对象

我们可以使用 LinkedHashSet 中的 contains 方法查找对象。如果该对象存在于集合中,则返回 true,否则返回 false。

LinkedHashSet<MyObject> set = new LinkedHashSet<MyObject>();
set.add(new MyObject("foo", 1));
set.add(new MyObject("bar", 2));
set.add(new MyObject("baz", 3));
MyObject obj = new MyObject("foo", 1);
if (set.contains(obj)) {
    System.out.println("Found: " + obj.toString());
} else {
    System.out.println("Not found: " + obj.toString());
}

上面的代码中,我们向集合中添加了三个 MyObject 对象,并将另一个 MyObject 对象赋值给 obj 变量。我们使用 contains 方法查找 obj 是否存在于集合中。由于 MyObject 类中实现了 equalshashCode 方法,我们可以正确地查找该对象。

查找第一个匹配的对象

如果我们想要查找第一个匹配的对象,我们可以使用 Java 8 中的流 API。

LinkedHashSet<MyObject> set = new LinkedHashSet<MyObject>();
set.add(new MyObject("foo", 1));
set.add(new MyObject("bar", 2));
set.add(new MyObject("baz", 3));
MyObject obj = set.stream()
    .filter(o -> o.getName().equals("foo") && o.getValue() == 1)
    .findFirst()
    .orElse(null);
if (obj != null) {
    System.out.println("Found: " + obj.toString());
} else {
    System.out.println("Not found: " + obj.toString());
}

上面的代码中,我们使用 LinkedHashSet 中的 stream 方法获取集合的流,然后使用 filter 方法筛选出第一个满足条件的对象。最后,我们使用 findFirst 方法获取第一个匹配的对象,如果不存在则返回 null。

查找所有匹配的对象

如果我们想要查找所有匹配的对象,我们可以使用 Java 8 中的流 API。

LinkedHashSet<MyObject> set = new LinkedHashSet<MyObject>();
set.add(new MyObject("foo", 1));
set.add(new MyObject("bar", 2));
set.add(new MyObject("baz", 3));
List<MyObject> results = set.stream()
    .filter(o -> o.getName().equals("foo") && o.getValue() == 1)
    .collect(Collectors.toList());
for (MyObject obj : results) {
    System.out.println("Found: " + obj.toString());
}

上面的代码中,我们使用 LinkedHashSet 中的 stream 方法获取集合的流,然后使用 filter 方法筛选出所有满足条件的对象。最后,我们使用 collect 方法将结果收集到一个列表中,并遍历列表输出所有匹配的对象。

结论

在 Java 中,我们可以使用 LinkedHashSet 中的 contains 方法查找对象,或者使用 Java 8 中的流 API 查找第一个或所有匹配的对象。我们需要确保自定义对象实现了 equalshashCode 方法,以便于判定对象是否相同。