반응형
환경: java 8+
java optional을 사용할 경우
null값을 대비해 기본 값을 return 할 수 있는 아래 두 함수가 있다.
orElse vs orElseGet
두 함수 모두 기본 값을 반환 할 수 있는데
orElse는 T객체 그 자체를, orElseGet은 람다식을 넘길 수 있다는 차이가 있다.
//orElse
UserStatistics one = statistics.stream().filter(UserStatistics::isHoldem).findFirst().orElse(new UserStatistics());
//orElseGet
UserStatistics one = statistics.stream().filter(UserStatistics::isHoldem).findFirst().orElseGet(() -> new UserStatistics());
또한 메모리/성능 상에서 차이도 있다.
orElse 는 값이 존재하여 else에 설정한 값을 반환하지 않게 될 때에도 이미 만들어 놓는다.
orElseGet은 값이 없어 진짜 필요할 때 실행된다.
따라서,
constant, static variable, or caching result 을 반환할 경우라면 orElse를 사용해도 되지만, 대량 작업을 하거나 새로운 객체를 생성해야할 경우 orElseGet를 사용하는게 좋겠다.
참고
https://medium.com/@ductin.tran/use-java-optional-orelse-and-orelseget-wisely-4eebb50aa12e
Use Java Optional OrElse and OrElseGet wisely
1. Introduction
medium.com
728x90
반응형
'개발 > java' 카테고리의 다른 글
[pom] http로 repository 연결 (0) | 2023.10.23 |
---|---|
[pom] element annotationprocessorpaths is not allowed here (0) | 2023.10.23 |
디자인 패턴 (0) | 2023.07.11 |
[이슈해결] NPE at HSSFSheet.autoSizeColumn (0) | 2023.06.28 |
[java] lambda stream and final (0) | 2023.02.06 |