📅  最后修改于: 2023-12-03 15:08:54.624000             🧑  作者: Mango
LinkedHashSet 是一种基于哈希表和双向链表实现的有序集合,它可以保证元素的顺序并且不包含重复元素。当我们向 LinkedHashSet 中添加一个自定义对象时,我们需要实现该对象的 equals
和 hashCode
方法,以便于判定对象是否相同。在本文中,我们将介绍如何在 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 类中实现了 equals
和 hashCode
方法,我们可以正确地查找该对象。
如果我们想要查找第一个匹配的对象,我们可以使用 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 查找第一个或所有匹配的对象。我们需要确保自定义对象实现了 equals
和 hashCode
方法,以便于判定对象是否相同。