我有一个包含两个String值的Arraylist,我想检查第二个Arraylist中是否存在两者这些值。出于某种原因,我被困住了,我无法让我的代码工作。
这是我的代码:
public static void main(String[] args) {
ArrayList <String> list1 = new ArrayList <String>();
list1.add("bob");
list1.add("karen");
ArrayList <String> list2 = new ArrayList <String>();
list2.add("java");
list2.add("karen");
list2.add("cook");
list2.add("tablet");
list2.add("cup");
list2.add("coffee");
for (String list11 : list1) {
for (String list22 : list2) {
if (list22.contains(list11)){
System.out.println ("List 2 contains the strings from list1");
}
}
}
}
我的if语句正在执行,即使list11中的所有值都不存在于list22中,但只有其中一个。我的目标是只有当list1中的所有值都出现在list2中时才执行if语句,而不会硬编码任何东西,因为list1最终应该增大。
我做错了什么?
答案 0 :(得分:2)
使用此:
if(list2.containsAll(list1))
System.out.println ("List 2 contains the strings from list1");
如果指定集合(list1)中的所有对象都是此List (list2)的元素,则 .containsAll()
返回true
,&amp;否则false
。
答案 1 :(得分:1)
在您的情况下,list2
是您正在检查的list1
的超集,for循环应如下所示:
boolean allElementsPresent = true;
for (String list11 : list1) {
if (!list22.contains(list11)){
allElementsPresent = false;
}
}
if(allElementsPresent){
System.out.println ("List 2 contains the strings from list1");
}
无需迭代list2
个对象。您只需迭代list1
以检查list2
中是否存在每个元素。