Optional.orElse() と Optional.orElseGet() の違いを理解する
Optional.orElse() と Optional.orElseGet()これは、値を含む場合と含まない場合があるコンテナ オブジェクトである Optional の処理に役立つ Java の 2 つのメソッドです。
orElse() の説明
orElse() は、引数として値(その他)を指定します。 Optional が存在する (値が含まれている) 場合は、その値が返されます。ただし、Optional が空の場合は、指定された値 (other) を返します。
orElseGet() の説明
orElseGet() も引数を取りますが、これは今度はサプライヤーの機能インターフェイスです。サプライヤーは引数をとらず、値を返します。 orElse() とは異なり、orElseGet() は、Optional が空の場合にのみ Supplier 関数を呼び出します。
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() はのみ実行します。
結論
オプションを使用する場合、orElse() と orElseGet() の違いを理解することが重要です。 orElseGet() は、オプションが存在する場合に不必要な操作を回避することで、オプションの値を処理する効率的な方法を提供します。
以上がOptional.orElse() の代わりに Optional.orElseGet() を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。