Map的computeIfPresent和computeIfAbsent
computeIfPresent和computeIfAbsent
啥玩意,这么像,我的英语不好,啥意思这?
- computeIfPresent 如果存在就计算
- computeIfAbsent如果不存在就计算
源代码
default V computeIfAbsent(K key,
Function<? super K, ? extends V> mappingFunction) {
Objects.requireNonNull(mappingFunction);
V v;
if ((v = get(key)) == null) { // 获取值但不存在
V newValue;
if ((newValue = mappingFunction.apply(key)) != null) { // 计算后不是null
put(key, newValue); // 加入到map
return newValue; // 返回新的值
}
}
return v; // 返回原来的值
}
default V computeIfPresent(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
Objects.requireNonNull(remappingFunction);
V oldValue;
if ((oldValue = get(key)) != null) { // 获取值但不存在
V newValue = remappingFunction.apply(key, oldValue); // 计算新值
if (newValue != null) {
put(key, newValue);
return newValue;
} else {
remove(key); // 会删除
return null;
}
} else {
return null;
}
}