我需要在集合中找到重复项并将它们放入一个数组中。
我写了这个方法:
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 流来做到这一点
- 首先将
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 则进行过滤,并将其收集为
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/