Map#computeIfAbsent
Map#computeIfAbsent
- 1. 源码解析
- 1.1 java.util.Map#computeIfAbsent
- 2.demo
1. 源码解析
1.1 java.util.Map#computeIfAbsent
default V computeIfAbsent(K key,Function<? super K, ? extends V> mappingFunction) {Objects.requireNonNull(mappingFunction);V v;if ((v = get(key)) == null) {// 如果map中的值为空,那么就回调lambda表达式生成值,参数为keyV newValue;if ((newValue = mappingFunction.apply(key)) != null) {// 将lambda中获取的值放入到map中put(key, newValue);// 返回的是lambda生成的值return newValue;}}//如果map中的值不为空,那么返回的是map中的值return v;}
- 如果map中的值为空,那么就回调lambda表达式生成值,参数为key
- 将lambda中获取的值放入到map中
- 返回的是lambda生成的值
- 如果map中的值不为空,那么返回的是map中的值
- mappingFunction为function,一个参数,一个返回值。
@FunctionalInterface
public interface Function<T, R> {R apply(T t);}
2.demo
public class mapTest {public static void main(String[] args) {Map<String, List<String>> map = new HashMap<>();List<String> valueList = map.computeIfAbsent("a", k -> new ArrayList<String>());valueList.add("value1");List<String> valueList2 = map.computeIfAbsent("a", k -> new ArrayList<String>());valueList2.add("value2");System.out.println(map);}
}
测试结果
