我很难找到Java上几个列表的交集.我正在做的是:我得到(让我们说)3个整数列表:
清单1:[2,2,2,2,5,5]
清单2:[2,2,103]
清单3:[2,431]
我正在使用每个剩余列表将retainAll应用于第一个:
list1.retainAll(list2);
list1.retainAll(list3);
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果:
list1:[2,2,2,2]
但我希望得到这个:
list1:[2]
...因为所有列表共享的唯一元素是一个 2而不是四个 2.
我知道这可能是retainAll函数的预期行为,但我需要得到上面提到的结果.
有帮助吗?
编辑: 使用HashSet禁止重复也不会有效.在这种情况下,例如:
清单1:[2,2,2,2,5,5]
清单2:[2,2,103]
清单3:[2,2,2,431]
我需要得到一个结果:
清单1:[2,2](因为所有列表至少有一对2)
代替
清单1:[2]
这个方法怎么样:
public static <T> Collection <T> intersect (Collection <? extends T> a, Collection <? extends T> b)
{
Collection <T> result = new ArrayList <T> ();
for (T t: a)
{
if (b.remove (t)) result.add (t);
}
return result;
}
public static void main (String [] args)
{
List <Integer> list1 = new ArrayList <Integer> (Arrays.<Integer>asList (2, 2, 2, 2, 5, 5));
List <Integer> list2 = new ArrayList <Integer> (Arrays.<Integer>asList (2, 2, 103));
List <Integer> list3 = new ArrayList <Integer> (Arrays.<Integer>asList (2, 431));
System.out.println (intersect (list1, intersect (list2, list3)));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23117 次 |
| 最近记录: |