Concatenate Streams
suggest changeVariable declaration for examples:
Collection<String> abc = Arrays.asList("a", "b", "c"); Collection<String> digits = Arrays.asList("1", "2", "3"); Collection<String> greekAbc = Arrays.asList("alpha", "beta", "gamma");
Example 1 - Concatenate two Stream
s
final Stream<String> concat1 = Stream.concat(abc.stream(), digits.stream()); concat1.forEach(System.out::print); // prints: abc123
Example 2 - Concatenate more than two 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
Alternatively to simplify the nested concat()
syntax the Stream
s can also be concatenated with 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
Be careful when constructing Stream
s from repeated concatenation, because accessing an element of a deeply concatenated Stream
can result in deep call chains or even a StackOverflowException
.
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents