java - 在字符串 Arraylist 中查找和打印重复项

标签 java string arraylist hashmap duplicates

<分区>

谁知道在 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());
//  }
}

注释掉的代码是我认为打印出重复项的代码,但我大错特错了!不知道如何打印出列表中重复的汽车并显示其数量。

最佳答案

完成填充 map 后,您可以对其进行迭代并仅打印键大于 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());

关于java - 在字符串 Arraylist 中查找和打印重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35778726/

相关文章:

java - EasyMock 中未找到 Mock 功能

java - 如何为现有的非安卓 Eclipse 项目制作安卓 list ?

java - Choco 求解器中的建模约束

java - 要求是从字符串中删除三个连续的相同字符

java - Groovy 字节数组被隐式转换为 ArrayList

java - 如何根据键值将 2 个 ArrayList<HashMap<String, String>> 合并为 1 个?

Java 结账练习

c - 如何根据 C 中的多个定界符分隔字符串?

json.Unmarshal 忽略 json 字符串中的 json 字符串值,不要尝试解析它

java - 打印出数组列表中的每个项目