如何在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());
}
}