>Java >java지도 시간 >언제 Optional.orElse() 대신 Optional.orElseGet()을 사용해야 합니까?

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

Linda Hamilton
Linda Hamilton원래의
2024-10-26 22:47:31550검색

When should you use Optional.orElseGet() instead of Optional.orElse()?

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

Optional 클래스는 orElse() 및 orElseGet()과 같은 메소드를 제공합니다. Optional이 있으면 값을 검색하고, 비어 있으면 기본값을 제공합니다. 그러나 동작에는 미묘한 차이가 있습니다.

  • orElse(): Optional에 값이 포함되어 있는지 여부에 관계없이 항상 제공된 함수를 호출하여 기본값을 가져옵니다. not.
  • orElseGet(): Optional이 비어 있는 경우에만 제공된 함수를 호출합니다.

orElseGet() 사용 시기

주요 차이점은 orElseGet()은 필요할 때까지 기본값 검색 함수의 실행을 지연하는 반면 orElse()는 항상 함수를 실행한다는 것입니다. 이는 기본값을 얻는 것이 필요한 경우에만 수행하고 싶은 비용이 많이 들거나 시간이 많이 걸리는 작업인 상황에서 중요할 수 있습니다.

예:

다음을 고려하세요. 리소스(Optional로 표시됨)를 찾아 해당 값을 검색하거나 기본값을 제공해야 하는 시나리오입니다. 기본값을 얻으려면 비용이 많이 드는 데이터베이스 쿼리가 필요한 경우 orElseGet()을 사용하여 리소스가 있을 때 쿼리를 피하는 것이 좋습니다.

<code class="java">Optional<Resource> resource = findResource();
Resource result = orElseGet(() -> getExpensiveDefaultValue());</code>

추가 참고 사항:

  • orElseGet()은 인수 없는 함수를 나타내는 기능적 인터페이스인 공급자 인터페이스 구현을 받습니다.
  • Optional이 인수가 아닌 경우 orElseGet()이 제공된 함수를 호출하지 않더라도 비어 있으면 여전히 람다 식을 평가합니다. 이는 표현식 내의 부작용이 계속 발생한다는 것을 의미합니다.

결론:

orElseGet()은 기본값 실행을 연기하는 방법을 제공합니다. 필요할 때까지 검색 기능을 사용하여 Optional이 비어 있지 않을 때 기본값을 얻는 데 비용이 많이 들거나 바람직하지 않은 경우 성능 최적화를 허용합니다.

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

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