Java 如何使用Map.merge将计数器作为值递增?

Java 如何使用Map.merge将计数器作为值递增?,java,merge,hashmap,Java,Merge,Hashmap,我正试图通过实现Map.merge()来重构一个方法,该方法可以更有效地对HashMap中的键进行计数。我如何在以下代码上实现它: public Map<Character, Integer> countCharacterUsage(String input) { Map<Character, Integer> characterToCountUsage = new WeakHashMap<>(); for (char symbol : in

我正试图通过实现Map.merge()来重构一个方法,该方法可以更有效地对HashMap中的键进行计数。我如何在以下代码上实现它:

 public Map<Character, Integer> countCharacterUsage(String input) {
    Map<Character, Integer> characterToCountUsage = new WeakHashMap<>();
    for (char symbol : input.toCharArray()) {
        if (characterToCountUsage.containsKey(symbol)) {
            int symbolsCount = characterToCountUsage.get(symbol);
            characterToCountUsage.put(symbol, ++symbolsCount);
        } else {
            characterToCountUsage.put(symbol, 1);
        }
    }

    return characterToCountUsage;
}
公共映射countCharacterUsage(字符串输入){
Map characterToCountUsage=新WeakHashMap();
for(字符符号:input.toCharArray()){
if(characterToCountUsage.containsKey(符号)){
int-symbolsCount=characterToCountUsage.get(符号);
characterToCountUsage.put(symbol,+symbol计数);
}否则{
characterToCountUsage.put(符号,1);
}
}
返回字符计数用法;
}
您可以使用

也有


使用merge()效率不会更高。如果确实要优化:不要使用tocharray(),因为它会克隆阵列。使用charAt()代替。非常感谢!但出于好奇,merge()是否也可以这样做?
characterToCountUsage.compute(symbol, (k,v)-> v==null ? 1 : v+1);
characterToCountUsage.merge(symbol,1, (k,v)-> v+1);