应该如何连接数组流?

How should one concatenate a stream of arrays?

我想通过可变累加器连接数组流。

目前我正在为Stream<Foo[]>做以下事情:

Foo[] concatenation = streamOfFooArrays.collect(Collector.of(
    ArrayList<Foo>::new,
    (acc , els ) -> {acc.addAll(Arrays.asList(els));},
    (acc1, acc2) -> {acc1.addAll(acc2); return acc1;},
    acc -> acc.toArray(new Foo[x.size()])
));

然而,对于感觉非常普遍有用的东西,令人失望的是标准库没有提供更直接的东西。

我是不是忽略了什么,或者有更好的方法吗?

您可以使用 flatMap 将数组的元素展平为 Stream<Foo>,然后使用 toArray 生成输出数组:

Foo[] concatenation = streamOfFooArrays.flatMap(Arrays::stream)
                                       .toArray(Foo[]::new);