JAVA8中关于Map新增computeIfAbsent方法的使用
目录
computeIfAbsent的语义
从map中根据key获取value为空,会将第二个参数的返回值存入并返回
使用姿势
map.computeIfAbsent("list", key -> Lists.newArrayList())
使用说明
如果不使用computeIfAbsent方法,java中的使用场景是什么样子的
public Object computeIfAbsent01() {
Map<String, Object> map = Maps.newHashMap();
//预期map.get(list)返回一个List集合
List<String> list;
if (map.get("list") == null) {
list = Lists.newArrayList();
map.put("list", list);
}
return map.get("list");
}
使用computeIfAbsent之后的简化写法
public Object computeIfAbsent02() {
Map<String, Object> map = Maps.newHashMap();
return map.computeIfAbsent("list", key -> Lists.newArrayList());
}
源码解析
default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) {
Objects.requireNonNull(mappingFunction);
V v;
//根据key获取value为空
if ((v = get(key)) == null) {
V newValue;
//先是赋值给newValue然后判断newValue是否为空 为空则返回null 不为空则返回第二个参数的值
if ((newValue = mappingFunction.apply(key)) != null) {
put(key, newValue);
return newValue;
}
}
return v;
}