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);