ArrayList包含另一个ArrayList

时间:2018-03-16 21:07:19

标签: java arrays java-8

我有两个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

4 个答案:

答案 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的长度缩小,任何共同的项目都将被删除。