JavaでのOptional orElse Optional 質問する

JavaでのOptional orElse Optional 質問する

私は新しいJava 8 のオプション型、そして機能的にサポートされていない一般的な操作と思われるものに遭遇しました: "orElseOptional"

次のパターンを考えてみましょう。

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 を意図しない方法で使用しているだけなのか、また、このケースに対処するために人々が考え出した他の方法は何か、興味があります。

カスタム ユーティリティ クラス/メソッドを含むソリューションは、私のコードで作業する人が必ずしもその存在を知るとは限らないため、エレガントではないと思います。

また、もしご存知の方がいらっしゃいましたら、そのようなメソッドは JDK 9 に含まれるのでしょうか、またそのようなメソッドをどこで提案すればよいのでしょうか。これは、私にとっては API のかなり明白な欠落のように思えます。

ベストアンサー1

orこれは、 を受け取るメソッド の形式で JDK 9 の一部ですSupplier<Optional<T>>。例は次のようになります。

return serviceA(args)
    .or(() -> serviceB(args))
    .or(() -> serviceC(args));

詳細についてはJavadoc のこの郵便受け私は書いた、またはチケットJDK-8080418この方法が導入された場所です。

おすすめ記事