Java Language Concatenate Streams


Exemple

Déclaration de variable pour des exemples:

Collection<String> abc = Arrays.asList("a", "b", "c");
Collection<String> digits = Arrays.asList("1", "2", "3");
Collection<String> greekAbc = Arrays.asList("alpha", "beta", "gamma");

Exemple 1 - Concaténer deux Stream s

final Stream<String> concat1 = Stream.concat(abc.stream(), digits.stream());

concat1.forEach(System.out::print);
// prints: abc123

Exemple 2 - Concaténer plus de deux Stream s

final Stream<String> concat2 = Stream.concat(
    Stream.concat(abc.stream(), digits.stream()),
    greekAbc.stream());

System.out.println(concat2.collect(Collectors.joining(", ")));
// prints: a, b, c, 1, 2, 3, alpha, beta, gamma

Alternativement, pour simplifier la concat() imbriquée de concat() les Stream peuvent également être concaténés avec flatMap() :

final Stream<String> concat3 = Stream.of(
    abc.stream(), digits.stream(), greekAbc.stream())
    .flatMap(s -> s);
    // or `.flatMap(Function.identity());` (java.util.function.Function)

System.out.println(concat3.collect(Collectors.joining(", ")));
// prints: a, b, c, 1, 2, 3, alpha, beta, gamma

Soyez prudent lors de la construction de Stream s à partir de concaténations répétées, car l'accès à un élément d'un Stream profondément concaténé peut entraîner des chaînes d'appel profondes ou même une StackOverflowException .