Java Optional 의 orElse () 와 orElseGet () 의 차이
1796 단어 java - web 학습
orElse()
방법 은 사용자 정의 형식의 데 이 터 를 매개 변수 로 한다.public T orElse(T t)
orElseGet()
방법 은 하나의 Supplier
유형의 데 이 터 를 매개 변수 로 한다.public T orElseGet(Supplier extends T> other)
2. 프로그램의 실행 과정 이 다르다
다음 코드 를 예 로 들 면:
public static void main(String[] args) {
String[] names = new String[]{"zhang", "wang", "li", "zhao", "wu"};
Optional.of("wang").orElse(getRandomName(names)); // "Generating a name..."
Optional.of("wang").orElseGet(() -> getRandomName(names));
}
public static String getRandomName(String[] names) {
System.out.println("Generating a name...");
Random random = new Random();
return names[random.nextInt(5)];
}
상기 코드 가 실 행 될 때
Optional.of("wang").orElse(getRandomName(names))
"Generating a name..." 을 인쇄 합 니 다. 실행 Optional.of("wang").orElseGet(() -> getRandomName(names))
할 때 출력 이 없습니다. 이것 은 orElse()
의 함수 getRandomName
가 호출 되 었 고 orElseGet()
의 Lambda 표현 식 이 실행 되 지 않 았 음 을 설명 합 니 다.상기 현상 이 발생 한 이 유 는 optional 대상 의 값 이 비어 있 든 없 든
orElse()
함수 가 실 행 됩 니 다.반면 orElseGet()
의 매개 변 수 는 하나의 Supplier
방법 이기 때문에 이 방법 은 필요 할 때 만 실행 되 는 것 이 특징 이 므 로 optional 대상 의 값 이 비어 있 을 때 orElseGet()
의 Supplier
방법 만 실행 된다.3. 성능 차이
orElse()
와 orElseGet()
집행 과정의 차이 로 인해 orElseGet()
방법의 집행 효율 도 상대 적 으로 빠르다. 이것 은 그 가 불필요 한 방법 호출 을 뛰 어 넘 기 때문이다.따라서 기본 값 이 미리 정 의 된 경우 에 만 사용
orElse()
하고 그렇지 않 으 면 사용 orElseGet()
하 는 것 이 좋다.