我想比较 a 中是否有任何对象list2
存在于一个list1
.
我可以迭代两个列表并使用比较所有元素.contains()
但我想知道是否没有更有效的方法。我发现this https://stackoverflow.com/questions/22557042/check-if-a-collection-contains-an-object-comparing-by-reference我正在尝试实施建议的方法:
List<Item> list1;
List<Item> list2;
boolean anyMatch = list1.stream().anyMatch(x -> x.equals(list2.stream()));
System.out.println(anyMatch);
当我这样做时,我不断地得到false
,即使我期望true
。怎么会?
根据您的评论,您有两个列表,list1
and list2
。您想查明是否至少有一个元素list2
包含在list1
.
通过 Stream API,您可以获得Stream
of list2
。然后,一个电话anyMatch(predicate) https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#anyMatch-java.util.function.Predicate-返回此流的元素之一是否与给定谓词匹配,在本例中,测试该元素是否包含在list1
.
boolean anyMatch = list2.stream().anyMatch(list1::contains);
这使用了一个方法参考 https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html作为谓语。
通过转换您将获得更好的性能list1
into a Set
,这保证了恒定时间查找:
boolean anyMatch = list2.stream().anyMatch(new HashSet<>(list1)::contains);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)