如何在java中获取映射中重复键的最新值?

如何在java中获取映射中重复键的最新值?,java,collections,Java,Collections,以下是我的要求:我必须计算列表中某个特定项目的出现次数,然后打印该项目及其出现次数。为此,我有以下代码: public void countOccurrences(Collection<String> list){ Map<String, Integer> occurrenceMap = new HashMap<String, Integer>(); for(String obj: list){ Integer

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

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());
    }
  }
我期望的结果是

apple:3
banana:2
mango:1
然而,即将到来的输出是

apple:1
banana:1
mango:1

我缺少什么?

我想你需要改变

occurrenceMap.put(obj,numOccurrence++)

occurrenceMap.put(obj,numOccurrence+1)
发生图.put(obj,++numOccurrence)


numOccurrence++
将在语句后递增
numOccurrence
。而且它永远不会被使用,因为下次循环运行时会重新设计
numOccurrence

您需要更改else部分的逻辑

 occurrenceMap.put(obj, ++numOccurrence);
因为岗位增加了

numOccurrence ++ 

返回
numOccurrence
的值,然后将
numOccurrence
的值递增1。因此,您不会将最新的一个添加到地图中。

您可以通过以下方式尝试:

List<String> list = new ArrayList<String>();
list.add("apple");
list.add("apple");
list.add("apple");
list.add("banana");
list.add("banana");
list.add("mango");

Set<String> unique = new HashSet<String>(list);
for (String key : unique) {
 System.out.println(key + ": " + Collections.frequency(list, key));
}

您还可以使用以下代码来实现您的目标

public static void countOccurrences(Collection<String> list){
  Map<String, Integer> occurrenceMap = new HashMap<String, Integer>();
  Integer temp;
  for(String obj: list){
       if((temp = occurrenceMap.put(obj, 1))!= null){
            occurrenceMap.put(obj, ++temp);
       }
  }
  for (Map.Entry<String, Integer> entry : occurrenceMap.entrySet()) {
        System.out.println(entry.getKey()+" : "+entry.getValue());
    }
}
publicstaticvoidcountocents(集合列表){
Map-occurrenceMap=新HashMap();
整数温度;
用于(字符串对象:列表){
if((temp=occurrenceMap.put(obj,1))!=null){
发生图放置(obj,++温度);
}
}
对于(Map.Entry:occurrenceMap.entrySet()){
System.out.println(entry.getKey()+“:”+entry.getValue());
}
}

try++numOccurence而不是
x++
在分配后而不是之前递增
x
banana: 2
apple: 3
mango: 1
public static void countOccurrences(Collection<String> list){
  Map<String, Integer> occurrenceMap = new HashMap<String, Integer>();
  Integer temp;
  for(String obj: list){
       if((temp = occurrenceMap.put(obj, 1))!= null){
            occurrenceMap.put(obj, ++temp);
       }
  }
  for (Map.Entry<String, Integer> entry : occurrenceMap.entrySet()) {
        System.out.println(entry.getKey()+" : "+entry.getValue());
    }
}