java - 如何将列表中的重复元素放入数组中?

标签 java java-8 java-stream

我需要在集合中找到重复项并将它们放入一个数组中。

我写了这个方法:

String[] mass = new String[(int) limit];

        for (int i = 0; i < duplicates.size(); i++){
            for (int j = 1; j < duplicates.size(); j++){
                if (i != j && duplicates.get(i).equalsIgnoreCase(duplicates.get(j))){
                    mass[j - 1] = duplicates.get(j);
                }
            }

我有这个 Collection :

List<String> duplicates = new ArrayList<>();
        Collections.addAll(duplicates, "java", "JaVa", "mm", "Mama", "ss", "MaMa");

但是当我在屏幕上显示结果时,我得到了这个答案。

JaVa
MaMa
Mama

我错过了什么?

最佳答案

如果你喜欢使用 java-8 流来做到这一点

  1. 首先将 List 流式传输到 Map 中,key 为 String value 为 Long count of occurrence

 Map<String, Long> result =  duplicates.stream().map(String::toLowerCase)
          .collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
  System.out.println(result);    //{ss=1, mm=1, java=2, mama=2}
  1. 如果出现次数大于 1 则进行过滤,并将其收集为 String 数组,下面的代码显示了两者的结合

String[] array = duplicates.stream().map(String::toLowerCase)
          .collect(Collectors.groupingBy(Function.identity(),Collectors.counting()))
          .entrySet().stream().filter(entry->entry.getValue()>1).map(Map.Entry::getKey).toArray(String[]::new);

   System.out.println(Arrays.toString(array));  //[java, mama]

关于java - 如何将列表中的重复元素放入数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54281190/

相关文章:

java - 在java中,如何将String转换为Date对象 "yyyy-MM-dd' T'HH :mm"

java - 无法创建 JexlEngine 对象

java - 如何在java 8中比较对象列表与长列表

java - 验证一个 Map 中的所有键/值对是否存在于另一个 Map 中

java - 每个有状态的中间 Stream API 操作都保证一个新的源集合吗?

java - 用java截屏

java - 如何将 Map<String, String> 转换为 RequestBody?

java - 流分组通过枚举类型列表

java - Java 8按属性区分

Java 8 : Applying Stream map and filter in one go