[Java8] Map의 key 가 null 일 경우 처리 방법

반응형
728x90
반응형

getOrDefault

key 가 null 일 경우 default Value 를 설정할 수 있다.

/* Map */
Map<String, Object> testMap2
          = Map.ofEntries(entry("AAA", 10),
                          entry("BBB", 20),
                          entry("CCC", 30));

 

  • Key가 존재하면 해당 Value 를 그대로 출력한다.
System.out.println(testMap2.getOrDefault("AAA", "NULL")); // 10

 

  • Key가 존재하지 않으면 설정된 "NULL"을 출력한다.
System.out.println(testMap2.getOrDefault("DDD", "NULL")); // NULL

 

 

계산패턴 computeIfAbsent

  • key 가 없을 경우 지정된 value를 쌍으로 Map 에 항목을 추가한다.
 /* Map */
 Map<String, Object> testMap3 = new HashMap<>();
 testMap3.put("AAA", 10);

 

  • key 가 "QQQ"인 요소가 없기 때문에 key : "QQQ", value : 50 인 항목이 추가된다.
testMap3.computeIfAbsent("QQQ", num -> 50);
System.out.println(testMap3); // {QQQ=50, AAA=10}

 

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) {
                put(key, newValue);
                return newValue;
            }
        }

        return v;
    }
...

computeIfAbsent 메서드가 받는 mappingFunction 람다식은 key가 존재하지 않을때만 수행된다.

 

예시
map.computeIfAbsent(key, k -> new ArrayList<>()).add(str);

위 코드는 key가 존재하지 않을때 새로운 리스트가 생성되고, 리턴되는 Value 에 데이터가 add 되는 형식이다.

 

 

반응형

Designed by JB FACTORY