Map<String, String> map = new HashMap<>();
// 값이 없으면 람다식의 결과 값을 put하고 값 리턴
String value = map.computeIfAbsent("key", key -> "없음" + key );
System.out.println(value);
// 실행결과 : 없음key
// 값이 존재하면 해당 key의 값 리턴
value = map.computeIfAbsent("key", key -> "없음" + key );
System.out.println(value);
// 실행결과 : 있음
첫 번째 전달 인자는 key이고, 두 번째 전달 인자는 연산을 수행할 람다식
리턴 값은 key의 값이 존재하면 해당 key의 값을 반환해주고, 해당 key의 값이 없으면 람다식을 수행하고 나온 결과 값을 반환
default V computeIfAbsent(K key,Function<? super K, ? extends V> mappingFunction) {
// 1. 람다식이 null인지 체크
Objects.requireNonNull(mappingFunction);
V v;
// 2. 파라미터로 받은 key의 value값이 null인지 체크
if ((v = get(key)) == null) {
V newValue;
// 3. 람다식에 key 전달 후 리턴 값이 null인제 체크
if ((newValue = mappingFunction.apply(key)) != null) {
// 4. 해당 key의 value값으로 newValue매핑 후 리턴
put(key, newValue);
return newValue;
}
}
// 5. key의 value값이 null이 아니라면 해당 key의 value리턴
return v;
}
key에 매핑된 value값이 있으면 기존 value값을 리턴
key에 매핑된 value값이 없으면 람다식을 실행해서 얻은 value값을 key에 매핑 후 value값을 리턴