You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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);

逻辑说明

每次循环处理数据时:

  1. 用getOrDefault获取键对应的值——存在就取当前值,不存在就取0;
  2. 把这个值加上要累加的1000;
  3. 再把结果存回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:26:16