【发布时间】:2016-04-16 22:34:00
【问题描述】:
我想比较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。怎么会?
【问题讨论】:
-
Steam 有很多脚手架来保持惰性评估的状态。
-
您正在将 list1 中的元素与 list2 的流进行比较。它们甚至不是同一类型。使用流不会让任何事情变得更快。您可以使用 list1.equals(list2) 但顺序很重要。如果顺序无关紧要并且项目是唯一的,请使用 Set 而不是 List。
-
@Tunaki 应该是列表,我的错。我想比较 list2 中的任何对象是否存在于 list1 中。应该更清楚。
-
你将如何通过迭代来做到这一点?举个例子,让我们更清楚地理解。
标签: java java-stream