私はこの質問をフレームに正確にどのように確認されませんでしたので、私と一緒にクマ...Javaストリーム> "orElseGet"を親ストリームにインライン化することは可能ですか?
1)は、オプションの要素のStream
をインスタンス化するためのより良い(別名より「正しい」)の方法は、他の、ありますnull
を追加し、続いてnull
'
Stream.of(... ,
person.likesRed() ? Color.RED : null)
.filter(Objects::nonNull)
...
2)第二に、親Stream
/map
に "インライン" への道以下orElseGet
機能はありますか?クリーナー式が
Stream.concat(Stream.of(Color.BLUE, Color.GREEN),
person.likesRed()? Stream.of(Color.RED): Stream.empty())
これはあなたの元の式よりも簡単ではありませんが、それは作成されないだろう
import static java.util.Optional.ofNullable;
public Response getFavouriteColours(final String personId) {
Person person = personService.findById(personId);
Supplier<List<String>> fallbackToDefaultFavouriteColours =() ->
Stream.of(
Color.BLUE,
Color.GREEN,
person.likesRed() ? Color.RED : null)
.filter(Objects::nonNull)
.map(Color::getName)
.collect(Collectors.toList());
return ofNullable(person)
.map(p -> ofNullable(p.getFavouriteColours()).orElseGet(fallbackToDefaultFavouriteColours))
.map(Response::createSuccess)
.orElse(Response::createNotFound);
}
ナー、これはそれが得られるほど良く見えます。 –
私はそれをもう一度。私はあなたの現在のコードの改善の範囲を見ることができません。これは実際どのようにできるかです。しかし、私は 'null'の代わりにDEFAULT/NONEという色のenum定数を使うかもしれませんが、それは意見の問題だと言いました。 –
'。orElseGet(Response :: createNotFound)'を意味しましたか? – Holger