ホームページ > Java > &#&チュートリアル > Optional.orElse() の代わりに Optional.orElseGet() を使用する必要があるのはどのような場合ですか?

Optional.orElse() の代わりに Optional.orElseGet() を使用する必要があるのはどのような場合ですか?

Linda Hamilton
リリース: 2024-10-26 22:47:31
オリジナル
565 人が閲覧しました

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() は関数を常に実行することです。これは、デフォルト値の取得が高価または時間のかかる操作であり、必要な場合にのみ実行したい場合に重要です。

例:

リソース (オプションで表される) を見つけてその値を取得するか、デフォルト値を指定する必要があるシナリオ。デフォルト値の取得にコストのかかるデータベース クエリが必要な場合は、リソースが存在するときに orElseGet() を使用してクエリを回避することをお勧めします。

<code class="java">Optional<Resource> resource = findResource();
Resource result = orElseGet(() -> getExpensiveDefaultValue());</code>
ログイン後にコピー

追加メモ:

  • orElseGet() は、引数のない関数を表す関数インターフェースであるサプライヤー インターフェース実装を受け取ります。
  • Optional が非空の場合でも、ラムダ式が評価されます。これは、式内の副作用が引き続き発生することを意味します。

結論:

orElseGet() は、デフォルト値の実行を延期する方法を提供します。必要になるまで取得関数を使用し、オプションが空でないときにデフォルト値の取得にコストがかかる場合や望ましくない場合にパフォーマンスの最適化を可能にします。

以上がOptional.orElse() の代わりに Optional.orElseGet() を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート