[解決済み] JavaにおけるOptional orElse Optional
2022-05-11 02:29:47
質問
私は、新しい Java 8 のオプション型 という、機能的にサポートされていない一般的な操作のようなものに遭遇しました。
次のようなパターンを考えてみましょう。
Optional<Result> resultFromServiceA = serviceA(args);
if (resultFromServiceA.isPresent) return result;
else {
Optional<Result> resultFromServiceB = serviceB(args);
if (resultFromServiceB.isPresent) return resultFromServiceB;
else return serviceC(args);
}
このパターンには多くの形式がありますが、要するに、現在のオプションが存在しない場合にのみ呼び出される新しいオプションを生成する関数を取るオプションに "orElse" が必要なのです。
実装はこんな感じでしょうか。
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
このような方法が存在しない理由があるのか、私が意図しない方法でOptionalを使っているだけなのか、このケースに対処するために他の人はどんな方法を思いついたのか、気になるところです。
カスタムユーティリティクラス/メソッドを含む解決策は、エレガントではないと思います。
また、もしご存知の方がいらっしゃいましたら、そのようなメソッドはJDK9に搭載されるのでしょうか、またそのようなメソッドをどこに提案すればよいのでしょうか。私には、これはAPIにかなり目立った欠落があるように思えます。
解決方法は?
これは、JDK 9の一部で、形式的には
or
を取る。
Supplier<Optional<T>>
. そうすると、あなたの例は次のようになります。
return serviceA(args)
.or(() -> serviceB(args))
.or(() -> serviceC(args));
関連
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Java 8 List<V> を Map<K, V> に変換する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
IllegalArgumentException この例外を解決する方法
-
ファインバグタイプ
-
Dateが型に解決できない問題を解決する
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
java 例外。Javaツールの初期化
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決
-
[解決済み】Java 8のOptional.ifPresentとif-not-Presentの機能的なスタイル?