我有HashMap
:
HashMap<string, Integer> hmap = new HashMap<>();
我想增加HashMap值。如果密钥不存在,为了避免nullPointer Exception
,我会检查它!我们说数据是:
//201803271 - 1000
//201803271 - 1000
//201803272 - 1000
//inside a loop i read the data...
if (hmap.get("201803271") != null) {
hmap.put("201803271", hmap.get("201803271") + 1000);
}else{
hmap.put("201803271", 1000);
}
//end of loop
我的工作原理如下:
201803271 - 2000
201803272 - 1000
但是,我读了这个问题How to update a value, given a key in a java hashmap?,并且有一个使用Java 8方法getOrDefault
的解决方案。我试过了
hmap.put("201803271", count.getOrDefault("201803271", 1000) + 1000)
然而,使用这个解决方案我得到错误的结果......
201803271 - 3000
201803272 - 2000
我错过了什么?
答案 0 :(得分:5)
Java 8为Map
接口引入了merge
方法,仅针对此类问题:
hmap.merge("201803271", 1000, Integer::sum);
这意味着“为此密钥设置1000,但如果此密钥已经有值,则为其添加1000”。
您的解决方案无法正常工作的原因是您默认获得1000,然后向其中添加1000。要使用getOrDefault
正确执行此操作,您需要在getOrDefault
中将1000替换为0。 hmap.put("201803271", count.getOrDefault("201803271", 0) + 1000))
答案 1 :(得分:2)
你可以这样做:
map.put(key, map.getOrDefault(key, 0) + inc);
或
map.compute(key, (k, v) -> v == null ? inc : v + inc);