Java 8 使用getOrDefault更新给定键的hashmap值

Java 8 使用getOrDefault更新给定键的hashmap值,java-8,hashmap,Java 8,Hashmap,我有一个HashMap: HashMap<string, Integer> hmap = new HashMap<>(); 我得到的结果是: 201803271 - 2000 201803272 - 1000 但是,我读了这个问题,有一个解决方案可以使用Java8方法getOrDefault。我试过了 hmap.put("201803271", count.getOrDefault("201803271", 1000) + 1000) 然而,使用这个解决方案,我得到

我有一个
HashMap

HashMap<string, Integer> hmap = new HashMap<>();
我得到的结果是:

201803271 - 2000
201803272 - 1000
但是,我读了这个问题,有一个解决方案可以使用Java8方法
getOrDefault
。我试过了

hmap.put("201803271", count.getOrDefault("201803271", 1000) + 1000)
然而,使用这个解决方案,我得到了错误的结果

201803271 - 3000
201803272 - 2000
我遗漏了什么?

Java 8为
Map
接口引入了方法,仅针对此类问题:

hmap.merge("201803271", 1000, Integer::sum);
它的意思是“为该键输入1000,但如果该键已具有值,则向其添加1000”


您的解决方案不起作用的原因是,默认情况下您得到了1000,然后向其中添加了1000。要使用
getOrDefault
正确执行此操作,您需要在
getOrDefault
中将1000替换为0
hmap.put(“201803271”,count.getOrDefault(“201803271”,0)+1000”)
您可以这样做:

map.put(key, map.getOrDefault(key, 0) + inc);

map.put(key, map.getOrDefault(key, 0) + inc);
map.compute(key, (k, v) -> v == null ? inc : v + inc);