Concater un nombre fixe d'options à diffuser
Nov 09 2020
J'ai 3 options:
Optional<T> optA = getOptA();
Optional<T> optB = getOptB();
Optional<T> optC = getOptC();
Existe-t-il une meilleure façon de les concaténer en a Stream<T>que:
Stream.concat(Stream.concat(optA.stream(), optB.stream()), optC.stream());
Si le nombre d'options augmente, cela devient très vite compliqué:
Stream.concat(Stream.concat(optA.stream(), optB.stream()), Stream.concat(optC.stream(), optD.stream());
Réponses
2 YCF_L Nov 09 2020 at 19:56
Qu'en est-il de l'utilisation Stream::ofet du concat en utilisant réduire:
Stream.of(optA.stream(), optB.stream(), optC.stream(), optD.stream())
.reduce(Stream::concat)
.orElseGet(Stream::empty);
Ou vous pouvez utiliser une carte, et votre code doit être:
Stream.of(optA, optB, optC, optD)
.map(Optional::stream)
.reduce(Stream::concat)
.orElseGet(Stream::empty);
Ce qui vous amène à combiner la carte et à réduire en utilisant uniquement flatMapcomme mentionné dans les commentaires:
Stream.of(optA, optB, optC)
.flatMap(Optional::stream);