ArrayList 包含另一个 ArrayList 中的一个或多个实体

5
我有两个ArrayLists(list1和list2)。我想要查看在list1中是否有任何一个(或多个)list2中的对象(这些对象是字符串)。
因此,以下是一些示例:
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,同时 contains() 也无法解决这个问题。
除了自己编写实现(将 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

你是否正在使用Java-8+? - Kevin DiTraglia
@KevinDiTraglia 是的 - DevelopingDeveloper
4个回答

11

像Java 8中的list2.stream().anyMatch(list1::contains)


4

在Java 8之前,您可以使用retainAll来轻松实现这一点:

Set<Foo> intersect = new HashSet<>(listOne);
intersect.retainAll(listTwo);
return !intersect.isEmpty();

4

不需要使用流来完成这个任务。相反,可以使用Collections.disjoint方法:

boolean result = !Collections.disjoint(list1, list2);

根据文档:

如果两个指定的集合没有共同的元素,则返回true


1
这是正确的答案。 - shmosel
@shmosel 而其他人都错了吗? - NiVeR
@NiVeR 不是说它们不能工作的意思。 - shmosel
@shmosel,你最好澄清一下你的陈述。 - NiVeR

1
list2.removeAll(list1);

如果你只需要返回布尔值,可以使用removeAll()方法,它会缩小list2的长度,任何共同存在的项都将被移除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接