我想比较 list2
中的任何对象是否存在于 list1
中。
我可以遍历两个列表并使用 .contains()
比较所有元素,但我想知道是否没有更有效的方法。我发现 了这个,我正在尝试实施建议的方法:
List<Item> list1;
List<Item> list2;
boolean anyMatch = list1.stream().anyMatch(x -> x.equals(list2.stream()));
System.out.println(anyMatch);
当我这样做时,我经常得到 false
,即使我期望 true
。怎么来的?
原文由 k88 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据您的评论,您有两个列表
list1
和list2
。您想要确定list2
中的元素是否至少包含在list1
中。使用 Stream API,您可以获得
Stream
的list2
。然后,调用anyMatch(predicate)
返回此流的元素之一是否与给定谓词匹配,在这种情况下,它测试该元素是否包含在list1
中。这使用 方法引用 作为谓词。
通过将
list1
转换为Set
,您可以获得更好的性能,这保证了恒定时间查找: