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

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

Nov 02, 2024 am 09:38 AM

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

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&lt;String&gt; myString = Optional.empty();

String result1 = myString.orElse(ExpensiveOperation.getExpensiveString()); // ExpensiveOperation always executed
String result2 = myString.orElseGet(() -&gt; ExpensiveOperation.getExpensiveString()); // ExpensiveOperation only executed if Optional is empty</code>
ログイン後にコピー

テスト ケース

違いを説明するために、オプションの文字列を返す関数を考えてみましょう:

<code class="java">public Optional&lt;String&gt; 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Mar 17, 2025 pm 05:35 PM

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte 2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte Mar 07, 2025 pm 06:09 PM

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? Mar 17, 2025 pm 05:43 PM

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? 高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? Mar 17, 2025 pm 05:46 PM

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?

node.js 20:キーパフォーマンスが向上し、新機能 node.js 20:キーパフォーマンスが向上し、新機能 Mar 07, 2025 pm 06:12 PM

node.js 20:キーパフォーマンスが向上し、新機能

Iceberg:データレイクテーブルの未来 Iceberg:データレイクテーブルの未来 Mar 07, 2025 pm 06:31 PM

Iceberg:データレイクテーブルの未来

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正

Javaで機能的なプログラミング技術を実装するにはどうすればよいですか? Javaで機能的なプログラミング技術を実装するにはどうすればよいですか? Mar 11, 2025 pm 05:51 PM

Javaで機能的なプログラミング技術を実装するにはどうすればよいですか?

See all articles