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

Barbara Streisand
リリース: 2024-10-26 09:27:30
オリジナル
667 人が閲覧しました

When should I use Optional.orElseGet() instead of Optional.orElse() in Java?

Optional.orElse() と Optional.orElseGet() の違いの確認

Java では、Optional クラスは orElse() のようなメソッドを提供します。 ) および orElseGet() は、欠落している可能性のある値または null 値を処理します。効果的に使用するには、そのニュアンスを理解することが重要です。

orElse() と orElseGet()

  • orElse():存在する場合は値、存在しない場合は提供されたデフォルト。
  • orElseGet(): 存在する場合は値を返し、存在しない場合は提供されたサプライヤーを呼び出した結果を返します。値が存在する場合、サプライヤーは呼び出されません。

orElseGet() を使用する場合

  • パフォーマンスの最適化:欠損値に対して実行するアクションの計算コストが高い場合は、isPresent() シナリオでの不必要な実行を回避できるため、orElseGet() の使用を検討してください。

実世界関数の例

違いを説明するために、次の関数を考えてみましょう:

<code class="java">public Optional<String> findMyPhone(int phoneId)</code>
ログイン後にコピー

シナリオ 1: orElse()

Optional.isPresent() の場合== true:

  • orElse() は、値がすでに存在する場合でも、後続の関数を冗長に呼び出します。

optional.isPresent() == false の場合:

  • orElse() は、その必要性に関係なく後続の関数を呼び出します。

シナリオ 2: orElseGet()

の場合Optional.isPresent() == true:

  • orElseGet() は、値が存在するためサプライヤーを呼び出しません。

Optional.isPresent() == false の場合:

  • orElseGet() は、サプライヤーを呼び出してデフォルト値を生成します。

コード例

<code class="java">public class TestOptional {
    public Optional<String> findMyPhone(int phoneId) {
        return phoneId == 10
                ? Optional.of("MyCheapPhone")
                : Optional.empty();
    }

    public String buyNewExpensivePhone() {
        System.out.println("Going to a very far store to buy a new expensive phone");
        return "NewExpensivePhone";
    }

    public static void main(String[] args) {
        // Scenario 1: orElse()
        Optional<String> phone = findMyPhone(10).orElse(buyNewExpensivePhone());
        // Scenario 2: orElseGet()
        phone = findMyPhone(-1).orElseGet(() -> buyNewExpensivePhone());
    }
}</code>
ログイン後にコピー

コードは、オプションの値の有無に基づいて orElse() と orElseGet() の異なる動作を示します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!