मैं सोच रहा था कि स्ट्रीम में सभी सूचियों के तत्वों वाले संग्रह में सूचियों की धारा से प्राप्त करने का पसंदीदा तरीका है या नहीं। मैं दो तरीकों से वहाँ पहुँचने के लिए के बारे में सोच सकते हैं:क्या कोई पसंदीदा तरीका सूचियों की एक सूची को एक फ्लैट सूची में एकत्रित करता है?
final Stream<List<Integer>> stream = Stream.empty();
final List<Integer> one = stream.collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);
final List<Integer> two = stream.flatMap(List::stream).collect(Collectors.toList());
दूसरा विकल्प ज्यादा मेरे लिए अच्छे है, लेकिन मुझे लगता है कि पहले एक समानांतर धाराओं में अधिक सक्षम है। क्या दो तरीकों में से एक के खिलाफ या इसके खिलाफ और तर्क हैं?
क्या आप विस्तृत कर सकते हैं, पहला संस्करण समांतर धारा में अच्छा प्रदर्शन क्यों नहीं करेगा? संग्रह के सामने इंटरमीडिएट ऑपरेशंस समानांतर में किया जा सकता है और कई एरेलीलिस्ट को संचयक फ़ंक्शन (संग्रह का दूसरा पैरामीटर) का उपयोग करके बनाए रखा जा सकता है। बाद में combiner (तीसरा पैरामीटर) का उपयोग सभी तत्वों को एक बड़े ArrayList में एकत्र करने के लिए किया जाएगा। (इस मामले में, दोनों कार्य निश्चित रूप से वही होंगे, लेकिन एक अलग तरीके से उपयोग किए जाते हैं) – muued
समानांतरता ** 'स्ट्रीम' ** प्रसंस्करण के संबंध में दोनों संस्करणों में समान है, जो * बाहरी * स्ट्रीम है। लेकिन दूसरे संस्करण में फ़्लैटेड स्ट्रीम ** ** उप-सूचियों ** के तत्वों से मिलती है जो व्यवहार्य होने पर उप-सूचियों के बीच में संचालन को विभाजित करने की अनुमति देती है। यह पहले संस्करण में असंभव है। जैसा कि कहा गया है, यह केवल तभी प्रासंगिक है जब स्ट्रीम में कुछ बड़ी उप-सूचियां हों (और यदि वे आकार में भिन्न हों)। चूंकि आपके पास 'फ्लैटमैप' और 'संग्रह' के बीच मध्यवर्ती परिचालन नहीं हैं, इसलिए केवल 'संग्रह' ही प्रभावित होता है, इसलिए अंतर बहुत छोटा हो सकता है। – Holger
ठीक है, अगर 'flatMap' और 'collect'' के बीच आवश्यक संचालन आवश्यक हैं तो निश्चित रूप से पहले संस्करण का उपयोग नहीं करना चाहिए। मैंने उन पर विचार नहीं किया। आपके जवाब के लिए धन्यवाद – muued