我有两个ArrayLists(list1& list2)。我想看看list2中是否有任何1个(或更多)对象(字符串)出现在list1中。
所以,举个例子:
List<String> list1 = Arrays.asList("ABCD", "EFGH", "IJKL", "QWER");
List<String> list2 = Arrays.asList("ABCD", "1234");
//Should result in true, because "ABCD" is in list 1 & 2
但是,方法containsAll()在这个用例中不起作用,因为1234
不会出现在list1中,并且会导致结果为false,也包含()不起作用。
除了编写我自己的实现(比较list2到list1中的所有值)之外,是否有类似于contains()的方法,其中可以传入字符串列表,并将其与另一个列表进行比较,然后返回如果该列表中包含一个或多个值,则为true吗?
更多示例:
ArrayList list1 = {1, 2, 3, 4, 5}
ArrayList list2 = {1, 2, 3} --> True
ArrayList list2 = {3, 2, 1} --> True
ArrayList list2 = {5, 6, 7, 8, 9} --> True
ArrayList list2 = {6, 7, 8, 9} --> False
答案 0 :(得分:11)
与java 8中的list2.stream().anyMatch(list1::contains)
类似。
答案 1 :(得分:4)
Pre-Java 8,您可以使用retainAll来实现这一目的:
Set<Foo> intersect = new HashSet<>(listOne);
intersect.retainAll(listTwo);
return !intersect.isEmpty();
答案 2 :(得分:3)
没有必要使用流来完成此任务。请改用Collections.disjoint
方法:
boolean result = !Collections.disjoint(list1, list2);
根据文件:
如果两个指定的集合没有共同的元素,则返回
true
。
答案 3 :(得分:1)
list2.removeAll(list1);
如果你只需要返回布尔值。使用removeAll(),它将list2的长度缩小,任何共同的项目都将被删除。