2016-09-06 47 views
5

我想通过一个可变的累加器连接一个数组流。如何连接数组流?

目前我做的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()]) 
)); 

然而,对于东西,感觉很一般有用的,这是令人失望的是,标准库不提供一些更直接。

我忽略了一些东西,还是有更好的方法?

回答

7

您可以使用flatMap到数组的元素拼合到Stream<Foo>,然后使用toArray产生输出数组:

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

嗯,这是一个更好的主意!谢谢。 – eggyal

+0

@eggyal不客气! – Eran