gpt4 book ai didi

java - 使用 Stream 比较两个集合 - anyMatch

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:51 24 4
gpt4 key购买 nike

我想比较 list2 中的任何对象是否存在于 list1 中。

我可以遍历两个列表并使用 .contains() 比较所有元素,但我想知道是否有更有效的方法。我找到了 this我正在尝试实现建议的方法:

List<Item> list1;
List<Item> list2;

boolean anyMatch = list1.stream().anyMatch(x -> x.equals(list2.stream()));
System.out.println(anyMatch);

当我这样做时,我经常得到 false,即使我期望的是 true。怎么会?

最佳答案

根据您的评论,您有两个列表,list1list2。您想知道 list2 中是否至少有一个元素包含在 list1 中。

使用 Stream API,您可以获得 list2Stream。然后,调用电话anyMatch(predicate)返回此流的元素之一是否与给定谓词匹配,在本例中,该谓词测试该元素是否包含在 list1 中。

boolean anyMatch = list2.stream().anyMatch(list1::contains);

这使用了 method reference作为谓词。

通过将 list1 转换为 Set,您可以获得更好的性能,这保证了恒定时间查找:

boolean anyMatch = list2.stream().anyMatch(new HashSet<>(list1)::contains);

关于java - 使用 Stream 比较两个集合 - anyMatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36670568/

24 4 0