gpt4 book ai didi

java - 在 Java 中使用 retainAll 获取多个列表的交集

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:24 29 4
gpt4 key购买 nike

我在获取 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]

...因为所有列表共享的唯一元素是一个 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)));
}

关于java - 在 Java 中使用 retainAll 获取多个列表的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14782981/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com