我在 Java 上获取多个列表的交集时遇到麻烦。我正在做的是这样的:
我得到(比方说)3 个整数列表:
列表 1: [2, 2, 2, 2, 5, 5]
列表 2: [2, 2, 103]
列表 3: [2, 431]
我使用剩余的每个列表将retainAll应用于第一个:
list1.retainAll(list2);
list1.retainAll(list3);
我得到这个结果:
列表 1: [2, 2, 2, 2]
但我希望得到这个:
列表1:[2]
...因为所有列表共享的唯一元素是one2 而不是four 2.
我知道这可能是 keepAll 函数的预期行为,但我需要获得上面提到的结果。
有什么帮助吗?
Edit:使用 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)));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)