Optional isPresent() 를 제거하다 보니 flatMap 을 사용해야 하는 경우도 발생하여 정리겸 블로깅.
로직에서 Optional 이 연속적으로 리턴되는 경우에 flatMap 을 사용해야 한다.
Optional map 과 flatMap 의 메서드 시그니처는 아래와 같다.
public<U> Optional<U> map(Function<? super T, ? extends U> mapper);
public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper);
차이점은 mapper function 의 리턴 타입인데 flatMap 의 경우 리턴타입이 Optional 이어야 한다.
벨덩에 좋은 예제가 있다.
assertEquals(Optional.of(Optional.of("STRING")),
Optional
.of("string")
.map(s -> Optional.of("STRING")));
assertEquals(Optional.of("STRING"), Optional
.of("string")
.flatMap(s -> Optional.of("STRING")));
출처 : www.baeldung.com/java-difference-map-and-flatmap
map() 은 결과를 Optional 로 감싸서 리턴하는 반면, flatMap() 은 그냥 반환한다.
아래는 읽어볼만한 Optional 관련 글 링크
dzone.com/articles/using-optional-correctly-is-not-optional
'Dev' 카테고리의 다른 글
[Intellij] 사용자 지정 live template기능 (0) | 2020.09.21 |
---|---|
[Intellij] usages 단축키 외 사용법 (0) | 2020.09.21 |
[gradle] dependency tree 보기 (0) | 2020.09.09 |
[vi] vi norm 블록 주석 (0) | 2020.02.13 |
[JPA] 낙관적인 락과 비관적인 락 간단 정리 (0) | 2020.02.11 |