pubIfAbsent 源码:
/**
* 入参key、value。
* 如果获取到key的值为null或不存在,则对key进行覆盖添加。并返回新的value值。
* 如果对应的key的值是存在的且不等于null,返回get到的值。
*/
default V putIfAbsent(K key, V value) {
V v = get(key);
if (v == null) {
v = put(key, value);
}
return v;
}
computeIfAbsent 源码:
/**
* 入参key,Function的对象(可以使用lambda表达式,暂时不清楚其实现)
* Function对象使用lambda表达式 k -> v 入参是key, v是返回值
* mappingFunction.apply()实现了部分业务并返回value
*
* 如果key获取到的value是null或不存在,获取到value,并对key,value进行put。并返回put结果(value)
* 如果value值已经存在,且不等于null,返回value值。
*
*/
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 = mapping