2016-09-06 59 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