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

あなたはStream<Foo>に配列の要素を平らにするflatMapを使用して、toArrayを使用して出力配列を生成することができます。

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

まあ、それははるかに良いアイデアです!ありがとうございました。 – eggyal

+0

@eggyalよろしくお願いします! – Eran

関連する問題