如何使用getOrDefault更新HashMap值,避免NullPointerException
用HashMap的getOrDefault方法实现值累加操作
嘿,这事儿好办!你之前靠空值判断避免NullPointerException的累加逻辑,完全可以用getOrDefault方法简化,代码会清爽很多。
为什么用getOrDefault?
getOrDefault(key, defaultValue)的逻辑特别直白:
- 如果Map里已经有指定的key,就返回它对应的数值;
- 如果key不存在,直接返回你设置的默认值(这里我们用0就刚好)。
这样就不用再写繁琐的if-else分支来判断null啦!
替换后的代码
原来的判断逻辑:
if (hmap.get("201803271") != null) { hmap.put("201803271", hmap.get("201803271") + 1000); }else{ hmap.put("201803271", 1000); }
可以直接改成一行代码:
hmap.put("201803271", hmap.getOrDefault("201803271", 0) + 1000);
逻辑说明
每次循环处理数据时:
- 用
getOrDefault获取键对应的值——存在就取当前值,不存在就取0; - 把这个值加上要累加的1000;
- 再把结果存回Map对应的键中。
不管键一开始存不存在,都能安全完成累加,完全不会触发NPE。
效果验证
针对你的示例数据(两次201803271 - 1000、一次201803272 - 1000),循环执行这段代码后:
201803271对应的值会是2000;201803272对应的值会是1000;
和你原来的逻辑结果完全一致。
额外小技巧(Java 8+)
如果你的项目用的是Java 8及以上,还可以用merge函数进一步简化,连put都不用写:
hmap.merge("201803271", 1000, Integer::sum);
它的逻辑是:键不存在就直接存1000;键存在就把现有值和1000相加后再存回去,同样能实现需求~
内容的提问来源于stack exchange,提问作者yaylitzis
相关产品推荐
相关产品推荐

