2014-06-25 20 views
11

हाय में मैं जब flatmap का उपयोग कर निम्नलिखित उदाहरणसमानता और Flatmap जावा 8 स्ट्रीम

IntStream.of(-1, 1).parallel().flatMap(i->IntStream.range(0,1000).parallel()).forEach(System.out::println); 

पर विचार करें यह कोई बात है कि मैं समानांतर भीतरी ध्वज सेट करें कि क्या समानांतरवाद के बारे में कोई प्रश्न हैं? परिणाम अगर मैं इसे छोड़ देता हूं या नहीं तो बहुत समान दिखता है। कोड (संदर्भ पाइपलाइन) मैपिंग को अनुक्रमित क्यों करता है?

result.sequential().forEach(downstream); 

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/stream/ReferencePipeline.java#ReferencePipeline.flatMap%28java.util.function.Function%29

+0

ठीक है, कोड में टिप्पणी के आधार पर 'हम यह भी बेहतर कर सकते हैं; गहराई = 0 मामले के लिए ऑप्टिमाइज़ करें और केवल स्प्लिटरेटर को पकड़ें और इसके लिए, मुझे लगता है कि उन्हें इसे 'परिणाम। परिणामी() के रूप में लागू करने की आवश्यकता नहीं है। (प्रत्येक) डाउनस्ट्रीम के लिए बेहतर प्रदर्शन के लिए समानांतर कार्यान्वयन का उपयोग किया जा सकता था । – Eran

उत्तर

8

वर्तमान JDK में (jdk1.8.0_25), जवाब नहीं है, यह आप समानांतर भीतरी ध्वज सेट कोई फर्क नहीं पड़ता: मैं लाइन से उलझन में हूँ , क्योंकि भले आप इसे सेट, .flatMap() कार्यान्वयन सेट की पीठ अनुक्रमिक यहाँ करने के लिए धारा:

result.sequential().forEach(downstream); 

("परिणाम" आंतरिक धारा है और यह sequential() विधि का दस्तावेज़ कहता है: अनुक्रमिक समकक्ष स्ट्रीम देता है। ही वापस आ सकते हैं, क्योंकि या तो धारा पहले से ही अनुक्रमिक था, या क्योंकि अंतर्निहित धारा राज्य अनुक्रमिक होने के लिए संशोधित किया गया था)

ज्यादातर मामलों में हो सकता है कोई प्रयास भीतरी धारा समानांतर बनाने के लिए। यदि बाहरी धारा में कम से कम समान संख्या में आइटम हैं जो समानांतर (फोर्कजोइनपूल.comमपूल()। मेरे कंप्यूटर में getParallelism() = 3 चला सकते हैं।

+0

मैं आखिरी बयान से थोड़ा असहमत हूं। यह केवल तभी सच है जब बाह्य तत्व प्रति कम्प्यूटेशनल लोड मोटे तौर पर बराबर है। – benehsv

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