1. ホーム
  2. java

[解決済み] Java 8 におけるオプショナルの連鎖

2023-05-18 07:24:35

質問

最初に存在するオプションが返されるように、オプションを連結する方法を探しています。 どれも存在しない場合 Optional.empty() が返されるはずです。

このようなメソッドがいくつかあると仮定して

Optional<String> find1()

連鎖させようとしている

Optional<String> result = find1().orElse( this::find2 ).orElse( this::find3 );

が、もちろんそれはうまくいきません。 orElse は値を期待し orElseGet は値を期待し Supplier .

どのように解決するのですか?

ストリームを使用する。

Stream.of(find1(), find2(), find3())
    .filter(Optional::isPresent)
    .map(Optional::get)
    .findFirst();

findメソッドを遅延的に評価する必要がある場合は、supplier関数を使用してください。

Stream.of(this::find1, this::find2, this::find3)
    .map(Supplier::get)
    .filter(Optional::isPresent)
    .map(Optional::get)
    .findFirst();