我想要比较两个不同的arraylists - 特别是检查list2中是否存在list1的某个元素。
这是我的代码:
for (int i = 0; i < list1.size(); i++){
if (list2.contains(list1.get(i))) {
System.out.println ("match");
}
}
基本上我循环遍历list1 - 并检查list2是否包含list1中的元素。但是,此if语句未被执行 - 并且没有值为null。
逻辑和代码对我来说似乎没问题。有什么问题?
答案 0 :(得分:0)
如果您正在尝试查找两个列表之间的交集,则更好的方法是使用retainAll
方法。假设您有两个列表:
List<String> list1 = asList("Martin", "Eric", "Kent");
List<String> list2 = asList("Kent", "Josh", "Eric");
以下列表将保留两者之间的交集:
List<String> intersection = new ArrayList<>(list1);
intersection.retainAll(list2);
致电retainsAll
后,十字路口将只包含Kent
和Eric
。
答案 1 :(得分:-1)
(这真是一个评论。不幸的是,SE在评论与答案和格式化选项之间存在巧合。)
以下是测试代码的完整程序示例,但有效。为清楚起见,我在匹配上打印了一个非空字符串。我建议通过用失败的案例替换列表来修改它。如果失败,请发布完整的程序。
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> listA = Arrays.asList(new String[] { "job" });
List<String> listB = Arrays.asList(new String[] { "bbb", "job" });
System.out.println("One match");
matcher(listA, listB);
}
public static void matcher(List<String> list1, List<String> list2) {
for (int i = 0; i < list1.size(); i++) {
if (list2.contains(list1.get(i))) {
System.out.println("Found one.");
}
}
}
}