java - 如何在java中获取Map中重复键的最新值?

标签 java collections

以下是我的要求:我必须计算列表中特定项目的出现次数,然后打印该项目及其出现次数。为此,我有以下代码:

public void countOccurrences(Collection<String> list){
      Map<String, Integer> occurrenceMap = new HashMap<String, Integer>();

      for(String obj: list){
           Integer numOccurrence = occurrenceMap.get(obj);
           if(numOccurrence == null){
                //first count
                occurrenceMap.put(obj, 1);
           } else{
                occurrenceMap.put(obj, numOccurrence++);

           }
      }
      for (Map.Entry<String, Integer> entry : occurrenceMap.entrySet()) {
            System.out.println(entry.getKey()+" : "+entry.getValue());
    }
  }

现在举例来说,添加到我列表中的项目如下:

list.add("apple");
list.add("apple");
list.add("apple");
list.add("banana");
list.add("banana");
list.add("mango");

我期望的输出是

apple:3
banana:2
mango:1

然而,即将到来的输出是

apple:1
banana:1
mango:1

我在这里错过了什么?

最佳答案

你需要改变你的else部分的逻辑

 occurrenceMap.put(obj, ++numOccurrence);

因为post增量

numOccurrence ++ 

返回 numOccurrence 的值,然后将 numOccurrence 的值递增 1。因此您没有将最新的放在 map 中。

关于java - 如何在java中获取Map中重复键的最新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33232805/

相关文章:

java - 是否允许/建议重用收集器?

java - 复制具有条目限制的 java 列表

java - 如何在java中使用winapi函数?

java - 为什么我仍然使用尾递归斐波那契算法烧毁堆栈?

java - 如何使用java在mysql表中生成下一个值?

java - 通用枚举到可迭代转换器

java - 流集合错误和理解

java - Spark远程开发环境

java - 使用 Spring 将空字符串转换为空日期对象

java - groupingBy 带 boolean 值,但添加自定义字符串作为键