2016-09-06 122 views
5

Dizili bir akümülatör ile bir diziler dizisini birleştirmek istiyorum. Dizilerden oluşan bir dizi nasıl birleştirilir?

Şu anda Stream<Foo[]> için aşağıdaki yapıyorum:

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()]) 
)); 

Ancak oldukça genel olarak yararlı bir his şey için, standart kütüphane daha acil bir şey sağlamadığını kırıcı.

Bir şeyleri gözden kaçırdım mı, yoksa A Better Way var mı?

cevap

7

Bir Stream<Foo> içine dizilerin öğelerini dümdüz ve sonra toArray kullanarak çıkış dizisini oluşturmak için flatMap kullanabilirsiniz:

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

Peki, bu çok daha iyi bir fikir! Teşekkür ederim. – eggyal

+0

@eggyal Hoş Geldiniz! – Eran