2016-09-06 7 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> में सरणियों के तत्वों समतल और फिर toArray का उपयोग कर उत्पादन सरणी उत्पन्न करने के लिए flatMap उपयोग कर सकते हैं:

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

ठीक है, कि एक बहुत अच्छा विचार है! धन्यवाद। – eggyal

+0

@eggyal आपका स्वागत है! – Eran

संबंधित मुद्दे