Update a hashmap value, given a key with getOrDefault
我有一个
1 | HashMap<string, Integer> hmap = new HashMap<>(); |
我想在哪里增加HashMap值。 为了避免
1 2 3 4 5 6 7 8 9 10 11 | //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 |
这是有效的:
1 2 | 201803271 - 2000 201803272 - 1000 |
但是,我读了这个问题如何更新一个值,给定一个java hashmap中的键? 并且有一个使用Java 8方法
1 | hmap.put("201803271", count.getOrDefault("201803271", 1000) + 1000) |
但是,有了这个解决方案我得到错误的结果......
1 2 | 201803271 - 3000 201803272 - 2000 |
我错过了什么?
Java 8仅为此类问题将
1 | hmap.merge("201803271", 1000, Integer::sum); |
这意味着"为此密钥设置1000,但如果此密钥已经有值,则为其添加1000"。
您的解决方案无法正常工作的原因是您默认获得1000,然后向其中添加1000。 要使用
你可以这样做:
1 | map.put(key, map.getOrDefault(key, 0) + inc); |
要么
1 | map.compute(key, (k, v) -> v == null ? inc : v + inc); |