我需要在集合中找到重复的项目并将其放入数组中。
我写了这个方法:
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);
}
}
我有这个收藏集:
List<String> duplicates = new ArrayList<>();
Collections.addAll(duplicates, "java", "JaVa", "mm", "Mama", "ss", "MaMa");
但是当我在屏幕上显示结果时,我得到了这个答案。
JaVa
MaMa
Mama
我想念什么?
答案 0 :(得分:2)
如果您想通过使用Java-8流来做到这一点
List
流到Map
中,键为String
,值是Long
发生次数 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}
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]
答案 1 :(得分:1)
我不想放弃它,因为看起来您正在学习。提示:您可以(也许应该在实践中)通过一个循环完成此任务。无需使用嵌套循环。请记住,可以通过使用重复项.size()-1缩短循环。
答案 2 :(得分:1)
有些事情,内循环只需要向前看,这样.FirstLine
可以从j
开始,因此,外循环以i+1
结束。然后,在分配给i < duplicates.size() -1
时不能使用I或j,为此需要一个单独的计数器
mass