दोनों नक्शे और flatMap हो सकता है - आप map
और flatMap
आपरेशन के बीच मतभेद के बारे में सोच रहे हैं, तो
List<MyType> reply = idList.stream()
.map(id -> getCollection(id))
.filter(collection -> collection != null)
.flatMap(Collection::stream)
.collect(Collectors.toList());
, तो आप this excellent answer संपर्क कर सकते हैं एक स्ट्रीम पर लागू होता है और वे दोनों स्ट्रीम स्ट्रीम करते हैं। अंतर यह है कि नक्शा संचालन प्रत्येक इनपुट मान के लिए एक आउटपुट मान उत्पन्न करता है, जबकि फ्लैटमैप ऑपरेशन प्रत्येक इनपुट मान के लिए मनमाना संख्या (शून्य या अधिक) मान उत्पन्न करता है।
यह प्रत्येक ऑपरेशन के लिए तर्कों में प्रतिबिंबित होता है।
नक्शा ऑपरेशन एक फंक्शन लेता है, जिसे इनपुट प्रवाह में प्रत्येक मान के लिए कहा जाता है और एक परिणाम मान उत्पन्न करता है, जिसे आउटपुट स्ट्रीम पर भेजा जाता है।
फ्लैटमैप ऑपरेशन एक ऐसा कार्य करता है जो संकल्पनात्मक रूप से एक मान का उपभोग करता है और मूल्यों की मनमानी संख्या उत्पन्न करता है। हालांकि, जावा में , यह मानों की मनमाने ढंग से संख्या वापस करने के लिए एक विधि के लिए बोझिल है, क्योंकि विधियां केवल शून्य या एक मान लौटा सकती हैं। एक एक एपीआई की कल्पना कर सकता है जहां फ्लैटमैप के लिए मैपर फ़ंक्शन एक मान लेता है और एक सरणी या मानों की एक सूची देता है, जिसे आउटपुट पर भेजा जाता है। यह देखते हुए कि यह स्ट्रीम लाइब्रेरी है, विशेष रूप से उपयुक्त तरीका वापसी मूल्यों की मनमानी संख्या का प्रतिनिधित्व करने के लिए मैपर फ़ंक्शन स्वयं को स्ट्रीम करने के लिए है! मैपर द्वारा लौटाई गई धारा से मान स्ट्रीम से निकाले जाते हैं और आउटपुट स्ट्रीम पर जाते हैं। मैपर फ़ंक्शन पर प्रत्येक कॉल द्वारा लौटाए गए मूल्यों के "क्लंप" को आउटपुट स्ट्रीम, में बिल्कुल अलग नहीं किया जाता है, इस प्रकार आउटपुट को "चपटा" कहा जाता है।
विशिष्ट उपयोग flatMap की नक्शाकार समारोह Stream.empty() वापस जाने के लिए अगर यह Stream.of की तरह शून्य मान, या कुछ भेजना चाहती है के लिए है (ए, बी, सी) अगर यह कई मूल्यों वापसी चाहता है । लेकिन निश्चित रूप से किसी भी स्ट्रीम को वापस किया जा सकता है।
फ्लैटमैप का उपयोग करने के कारण के बारे में संक्षिप्त स्पष्टीकरण दूसरों को –
@ManuelS को समझने में भी मदद करेगा। यदि आप नीले रंग में रंगीन फ्लैटमैप लिंक पर क्लिक करते हैं, तो फ्लैटमैप का एक संक्षिप्त विवरण होगा। – John
flatmap स्ट्रीम प्राप्त करने की आवश्यकता है चयन() रिटर्न सूची? हो सकता है कि आपको इस तरह अपना कोड बदलना होगा ... 'stream()। नक्शा (आईडी -> getCollection (id))। flatMap (सूची :: स्ट्रीम)' –