Java串流

示例

变量声明的例子:

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

示例1-连接两个Streams

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

concat1.forEach(System.out::print);
// 印刷品:abc123

实施例2 -串联两个以上的Stream小号

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

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

另外,为简化嵌套concat()语法,Stream还可与串联flatMap():

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

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

Stream从重复级联构造s时要小心,因为访问深度级联的元素Stream可能会导致深度调用链,甚至会导致StackOverflowException。