2017-11-04 37 views
5

मैं जावा स्ट्रीम का उपयोग कैसे करना सीख रहा हूं और नेस्टेड संग्रहों को स्ट्रीम करने और परिणामों को संग्रह में एकत्रित करने में कुछ मदद की आवश्यकता है।जावा स्ट्रीम: एक नेस्टेड संग्रह एकत्र करें

नीचे दिए गए सरल उदाहरण में, मैंने 2 ArrayLists बनाए हैं और उन्हें एक ArrayList में जोड़ा है। मैं प्रत्येक नेस्टेड संग्रह पर एक साधारण कार्य करने में सक्षम होना चाहता हूं और फिर परिणामों को एक नए संग्रह में कैप्चर करना चाहता हूं। कोड की अंतिम पंक्ति संकलित भी नहीं होती है। किसी भी स्पष्टीकरण की सराहना की जाएगी!

ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(1,2,3)); 
    ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(4,5,6)); 

    ArrayList<ArrayList<Integer>> nested = new ArrayList<ArrayList<Integer>>(); 
    nested.add(list1); 
    nested.add(list2); 

    ArrayList<ArrayList<Integer>> result = nested.stream() 
      .map(list -> list.add(100)) 
      .collect(Collectors.toList()); 
+0

आप वास्तव में क्या चाहते हैं? आपका 'नेस्टेड.स्ट्रीम()' एक स्ट्रीम स्ट्रीम करेगा > 'ताकि आप प्रत्येक नेस्टेड सूची को अपेक्षित रूप से संचालित कर सकें। या क्या आपको इसे 'स्ट्रीम ' में फ़्लैट करने की आवश्यकता है ताकि आप नेस्टेड सूची के प्रत्येक तत्व पर काम कर सकें? –

+0

संग्राहक.तोलिस्ट() का उपयोग सूची बनाने के लिए किया जाता है। एक ArrayList नहीं है। इंटरफेस के लिए कार्यक्रम, कार्यान्वयन नहीं। साथ ही, आपको उन तत्वों को म्यूटेट नहीं करना चाहिए जिन पर आप स्ट्रीम के साथ पुनरावृत्त कर रहे हैं। यह नहीं है कि धाराएं क्या हैं। –

+0

'सूची' की विधि में वापसी' टाइप 'बूलियन' है, इसलिए यह' .map (list -> list.add (100)) लिखकर 'स्ट्रीम ' –

उत्तर

1

समस्या यह है कि List#add एक List वापस नहीं करता है।

List<ArrayList<Integer>> result = nested.stream() 
     .map(list -> { 
      list.add(100); 
      return list; 
     }) 
     .collect(Collectors.toList()); 

या आप map का उपयोग कर छोड़ सकते हैं और यह forEach का उपयोग कर सकता है, क्योंकि ArrayList परिवर्तनशील है: इसके बजाय, आप मानचित्रण के बाद सूची वापस जाने के लिए की जरूरत है

nested.forEach(list -> list.add(100)); 
0

आप Stream.of() उपयोग कर सकते हैं यह करने के लिए , पहले से घोंसला सख्त बनाने के बिना।

 List<ArrayList<Integer>> nestedList = Stream.of(list1, list2) 
      .map(list -> {list.add(100); return list;}) 
      .collect(Collectors.toList()); 

और शायद नक्शा ऑपरेशन को एक अलग फ़ंक्शन में निकालें।

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