2014-04-16 15 views
28

मैं निम्नलिखित है स्थितिजावा 8: धारा एपीआई

Map<Key, ListContainer> map; 

public class ListContainer{ 
    List<AClass> lst; 
} 

मैं एक Map नक्शे से सभी सूचियों ListContainer वस्तुओं से lst मर्ज करने के लिए है के साथ सूची मर्ज करें।

public static void main(String args[]){ 
    List<AClass> alltheObjectsAClass = map.values().stream(). // continue....  
} 

जावा 8 स्ट्रीम एपीआई का उपयोग करके कोई विचार कैसे?

+0

आपको एक उदाहरण आप को मर्ज करने में क्या मतलब है प्रदान कर सकते हैं? मान लें कि आपका नक्शा '{ए: [1,2], बी [3,4]} है, क्या आप उन्हें [1,2,3,4]' की तरह श्रृंखला बनाना चाहते हैं, या सूचियों की सूची बना सकते हैं, '[[1,2], [3,4]] ', या उन्हें ज़िप [' [1,3], [2,4]] '? साथ ही, आप जानते हैं कि मानचित्र के पास कोई ऑर्डर नहीं है, है ना? –

+0

@tobias_k मैं परिणाम '[1,2,3,4] 'होना चाहता हूं, बिना छेड़छाड़ की! –

+0

यदि 'ListContainer' केवल' सूची 'को लपेटता है तो आप' मानचित्र <कुंजी, सूचीकंटर> 'को' मानचित्र > ' – ThePyroEagle

उत्तर

82

मुझे लगता है कि flatMap() वह है जिसे आप ढूंढ रहे हैं।

उदाहरण के लिए:

List<AClass> allTheObjects = map.values() 
     .stream() 
     .flatMap(listContainer -> listContainer.lst.stream()) 
     .collect(Collectors.toList()); 
+17

'के साथ प्रतिस्थापित कर सकते हैं नोट करें कि फ्लैटमैप बस' .flatMap (संग्रह :: स्ट्रीम)' – Jean

+1

हो सकता है? टिप्पणियां क्यों हटा दी गईं जो बताती हैं कि क्यों '.flatMap (संग्रह :: स्ट्रीम) 'संभव नहीं है? – Puce

+0

@Puce अच्छा सवाल है, हालांकि यह संभव है: यदि 'ListContainer' encapsulated है (यानी' lst' के लिए गेटटर है), तो आप '.flatMap (->) 'को' .map में विघटित कर सकते हैं (ListContainer :: getLst) '' .flatMap (संग्रह :: स्ट्रीम) ' – TWiStErRob

22

वैकल्पिक: Stream.concat()

Stream.concat(map.values().stream(), listContainer.lst.stream()) 
          .collect(Collectors.toList() 
+0

प्लस 1 हालांकि यह प्रश्न का उत्तर नहीं देता है, यह प्रश्न –

+0

के शीर्षक का उत्तर देता है जो वास्तव में मैं ढूंढ रहा था! धन्यवाद! – Hans

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