240203 computeIfAbsent()

Jongleee·2024년 2월 3일
0

TIL

목록 보기
486/576

computeIfAbsent()

  • key의 값이 없으면 compute()를 해서 채워주는 메소드
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값을 리턴

출처: https://codingnojam.tistory.com/39

0개의 댓글