Java Optional 의 orElse () 와 orElseGet () 의 차이

1796 단어 java - web 학습
1. 수신 하 는 매개 변수 가 다 름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() 하 는 것 이 좋다.

좋은 웹페이지 즐겨찾기