在java中获取列表中的重复术语

时间:2017-09-11 16:02:48

标签: java

代码有什么问题?我没有得到任何输出值。但它应该打印重复的值。 (aArraylist

HashSet<Integer> hs=new HashSet();
hs.addAll(a);
List<Integer> b=new ArrayList();
a.removeAll(hs);
System.out.println(a);

2 个答案:

答案 0 :(得分:0)

我怀疑你认为a.removeAll(hs);最多删除一个元素一次。事实并非如此。作为the docs州:

  

[...]此调用返回后,此集合将不包含与指定集合

共同的元素

这意味着,即使hs.addAll(a);会导致包含可能少于a的值的Set(缺少重复项),调用a.removeAll(hs)仍会删除所有原始值以及重复。

removeAll的源代码会验证在a上进行迭代并检查a中的hs元素是否在a中,并将其从{{1}中移除如果是这样的话。它不会迭代hs并删除a的匹配元素。 Source grepcode

答案 1 :(得分:0)

您可以使用的是removeIf

List<Integer> a = new ArrayList<>(Arrays.asList(1,1,1,1,1,1,2,2,3,3,4,5,6,6,7)); 

Map<Integer, List<Integer>> counter = a.stream().collect(Collectors.groupingBy(i -> i));
a.removeIf(v -> counter.get(v).size() == 1);
System.out.println(new HashSet<Integer>(a)); //[1, 2, 3, 6]