본문 바로가기

Programing/JVM(Java, Kotlin)

Java 8 - get & put -> computeIfAbsent 바꾸기 예제

computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)



아래와 같은 코드가 있다고 하자.

Map<Long, Foo> map = Maps.newTreeMap();

Foo foo = map.get(id);

if (foo == null) {

map.put(id, createFoo(id));

}


IntelliJ를 사용하고 있다면  아래와 같은 Tip을 보여줄 것이다.

Map.get and condition could be replaced with single method call less... (⌘F1) 

Inspection detects calls to Map.get which could be replaced with computeIfAbsent

computeIfAbsent로 바꿀 수 있다는 것인데 구문이 어떻게 될까?

세줄이 아래와 같이 한 줄로 바뀐다.

Map<Long, Foo> map = Maps.newTreeMap();

Foo foo = map.computeIfAbsent(id, k -> createFoo(id));


물론 리팩토링 하고 나서 테스트 코드 돌려보는 것은 잊지말자.