有人知道在String ArrayList中查找重复项并打印出重复项的最有效方法吗?
例如,我有一个包含以下内容的ArrayList:
ArrayList<String> carLIST = new ArrayList<String>();
carLIST = {"Car1", "Car2", "Car3", "Car1", "Car2", "Car2"};
基本上列表中的任何内容我不止一次找到重复项(我认为我已经在下面完成)并且还返回一个System.out.println();显示以下内容:
Car1:count = 2
Car2:count = 3
Map<String,Integer> repeatationMap = new HashMap<String,Integer>();
for(String str : carLIST) {
if (repeatationMap.containsKey(str) {
repeatationMap.put(str,repeatationMap.get(str) +1);
}
else {
epeatationMap.put(str, 1);
}
// if (repeatationMap.get(str) > 1) {
// System.out.println(repeatationMap.entrySet());
// }
}
代码注释掉了我认为打印出来的副本但是我真的错了!不知道如何在列表中打印出重复的汽车并显示其数量。
答案 0 :(得分:3)
完成填充地图后,您可以迭代它并仅打印键大于1的条目:
for (Map.Entry<String, Integer> e : repeatationMap.entrySet()) {
if (e.getValue() > 1) {
System.out.println (e.getKey());
}
}
请注意,顺便说一句,Java 8允许您以相对优雅的方式在单个语句中执行整个计数和减少流程:
List<String> duplicateCars =
carLIST.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet()
.stream()
.filter(e -> e.getValue() > 1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
答案 1 :(得分:0)
注释掉的部分将打印一些不可读的对象描述。而是使用:
System.out.println(repeatationMap.get(str));
另外,为避免多次打印相同的字符串,请创建一个布尔集以跟踪已打印的字符串。这样就可以避免再次遍历地图。
如果要显示重复数量,则无论如何都将被迫进行第二次循环。