“Map.get“ and value test should be replaced with single method call

今天提交代码使用SonarLint检查时发现

 Map.get and value test should be replaced with single method call应该使用单个方法代替map.get

StatisMaxPower statisMaxPower = map.get(id);
if(statisMaxPower == null){
    statisMaxPower = new StatisMaxPower();
    statisMaxPower.setId(id);
    statisMaxPower.setName(name);
    map.put(id,statisMaxPower );
}

在JAVA8的Map接口中,增加了一个computeIfAbsent:

default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)

Function是一个函数式接口

R apply(T t);

此方法首先判断缓存map中是否存在指定的key值,如果不存在,会自动调用mappingFunction(key)计算key的value,然后将key = value放入到缓存map

实例代码:

Map<String, String> map = new HashMap<>();
// java8之前,从map中根据key获取value操作可能会下面的操作
String key = map.get("key");
if (key == null) {
    key = "hh";
    map.put("key", key);
} else {
    // 如果key对应的value值存在,进行相应的操作
}

// java8之后,上面的操作可以简化为一行,若key的value值为空,会将第二个参数的返回值存入并返回
String val = map.computeIfAbsent("key1", k -> "test");
System.out.println(map);
// 打印:{key1=test, key=hh}

 把代码改成如下方法:

StatisMaxPower statisMaxPower = map.computeIfAbsent(id,k ->{
    StatisMaxPower newStatisMaxPower = new StatisMaxPower();
    newStatisMaxPower.setId(id);
    newStatisMaxPower.setName(name);
    map.put(id,newStatisMaxPower);
    return newStatisMaxPower;
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值