>  기사  >  Java  >  언제 Optional.orElse() 대신 Optional.orElseGet()을 사용해야 합니까?

언제 Optional.orElse() 대신 Optional.orElseGet()을 사용해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 09:38:31721검색

 When Should I Use Optional.orElseGet() Instead of Optional.orElse()?

Optional.orElse()와 Optional.orElseGet()의 차이점 이해

Optional.orElse()와 Optional.orElseGet() 값을 포함하거나 포함하지 않을 수 있는 컨테이너 개체인 Optional을 처리하는 데 도움이 되는 Java의 두 가지 메서드입니다.

orElse()

orElse()에 대한 설명은 다음과 같습니다. 값(기타)을 인수로 사용합니다. Optional이 존재하는 경우(값 포함) 해당 값을 반환합니다. 그러나 Optional이 비어 있으면 제공된 값(기타)을 반환합니다.

orElseGet() 설명

orElseGet()도 인수를 취하지만 이는 이제 공급자 기능 인터페이스입니다. 공급자는 인수를 사용하지 않고 값을 반환합니다. orElse()와 달리 orElseGet()은 Optional이 비어 있을 때만 공급자 함수를 호출합니다.

orElseGet()을 언제 사용해야 합니까?

orElse의 주요 차이점 () 및 orElseGet()은 제공된 인수로 인해 비용이 많이 드는 작업이 발생하는 경우입니다. Optional이 비어 있지 않으면 orElse()를 사용하면 불필요하더라도 제공된 작업을 계속 수행합니다. 그러나 orElseGet()은 이러한 불필요한 작업을 피하고 필요할 때만 실행합니다.

다음 예를 고려하세요.

<code class="java">Optional<String> myString = Optional.empty();

String result1 = myString.orElse(ExpensiveOperation.getExpensiveString()); // ExpensiveOperation always executed
String result2 = myString.orElseGet(() -> ExpensiveOperation.getExpensiveString()); // ExpensiveOperation only executed if Optional is empty</code>

테스트 사례

차이점을 설명하기 위해 선택적 문자열을 반환하는 함수를 고려해 보세요.

<code class="java">public Optional<String> findMyPhone(int phoneId) { ... }</code>

시나리오 1: orElse()

Optional.isPresent() Used phone
True (redundant call) NewExpensivePhone
False NewExpensivePhone

시나리오 2: orElseGet()

Optional.isPresent() Used phone
True MyCheapPhone
False NewExpensivePhone

테스트 사례에서 볼 수 있듯이 orElse()는 항상 제공된 함수를 실행하는 반면 orElseGet()은 실행만 수행합니다.

결론

Optional을 사용할 때는 orElse()와 orElseGet()의 차이점을 이해하는 것이 중요합니다. orElseGet()은 Optional이 있을 때 불필요한 작업을 방지하여 Optional 값을 처리하는 효율적인 방법을 제공합니다.

위 내용은 언제 Optional.orElse() 대신 Optional.orElseGet()을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.