我很想找到解决以下问题的方法。 我有4个不同的ArrayList从数据库中获取它们的值。 它们的大小可以从0(包括)到现在。 每个列表也可能具有不同的大小和值。 我想要有效地做的是: 比较所有非0大小的列表,并检查它们是否有一些共同的整数以及这些值是什么。
有什么想法吗? 谢谢!
答案 0 :(得分:6)
如果你需要一个普通整数的集合,不包括空整数:
List<List<Integer>> lists = ...
Collection<Integer> common = new HashSet<Integer>(lists.get(0));
for (int i = 1; i < lists.size(); i++) {
if (!lists.get(i).isEmpty())
common.retainAll(lists.get(i));
}
最后common
将包含所有这些整数相同的整数。
答案 1 :(得分:2)
您可能希望使用apache commons CollectionUtils.intersection()
来获取两个集合的交集......
迭代生成交集,如果完成后它不是空的 - 你有一个共同的元素,它就在这个结果集合中。
关于空列表:只检查其size()
是否为0,如果是,则跳过此列表。
答案 2 :(得分:2)
您可以对ArrayList对象使用set intersection操作。
这样的事情:
List<Integer> l1 = new ArrayList<Integer>();
l1.add(1);
l1.add(2);
l1.add(3);
List<Integer> l2= new ArrayList<Integer>();
l2.add(4);
l2.add(2);
l2.add(3);
List<Integer> l3 = new ArrayList<Integer>(l2);
l3.retainAll(l1);
现在,l3应该只有l1和l2之间的共同元素。
答案 3 :(得分:0)
你可以这样做。如果要搜索多个元素,请将搜索放在循环中。
列出aList = new ArrayList(); aList.add(new Integer(1));
if(aList!= null&amp;&amp;!aList.isEmpty()){ if(aList.contains(1)){ System.out.println(“得到它”); } }