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

Sonar提示使用Map#computeIfAbsent,如何改写方法保证结果一致?

使用Map#computeIfAbsent改写原方法并保证逻辑一致

原方法代码:

private static void method(Integer key, final Map<Integer, Integer> aMap) {
  var value = aMap.get(key);
  if(value == null) {
    value = 0;
  }
  aMap.put(key, value + 1);
}

你担心的点没错:单纯调用computeIfAbsent(key, k -> 0)会把0存入Map,但只要调整写法,就能让改写后的逻辑和原方法完全一致,同时满足Sonar的提示要求:

private static void method(Integer key, final Map<Integer, Integer> aMap) {
  aMap.put(key, aMap.computeIfAbsent(key, k -> 0) + 1);
}

逻辑一致性说明

  • 原方法逻辑:
    • 当key不存在时,直接向Map存入1(先把value设为0,再计算0+1)
    • 当key存在时,取出原有值加1后存回
  • 改写后逻辑:
    • aMap.computeIfAbsent(key, k -> 0):key不存在时,先向Map存入0并返回0;key存在时直接返回现有值
    • 紧接着将返回值+1,通过put存入Map——这一步会覆盖掉之前存入的0(仅针对新增key的场景)
    • 最终Map中的结果和原方法完全一致:新增key时存1,已有key时存原有值+1

内容的提问来源于stack exchange,提问作者thmasker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:49:56