दिलचस्प पोस्ट
क्यों। नेट स्ट्रिंग अपरिवर्तनीय है? गिट ने असंबंधित इतिहास को मर्ज करने से इंकार कर दिया "या" और || के बीच का अंतर रुबी में? जावास्क्रिप्ट – वर्तमान उपयोगकर्ता का नाम कैसे प्राप्त करें सामान्य प्रकार का उदाहरण बनाएं? लंबे समय से सी / सी ++ क्या शॉर्ट सर्किटिंग लॉजिकल ऑपरेटर अनिवार्य है? और मूल्यांकन आदेश? MongoDb में 15 मिनट का समय अंतराल के परिणामस्वरूप ग्रुप का परिणाम प्लॉट के साथ प्लॉट चिकनी रेखा माउस व्हील इनपुट को नियंत्रित करने के बजाए कर्सर के नीचे नियंत्रित करने के लिए कैसे करें? घोषित गुणों के लिए डॉट नोटेशन बनाम संदेश नोटेशन एंड्रॉइड एक्सीलरोमीटर सटीकता (जड़ता नेविगेशन) क्या क्वेरी स्ट्रिंग पैरामीटर HTTPS (HTTP + SSL) में सुरक्षित हैं? लंगर लिंक पर क्लिक करते समय चिकना स्क्रॉल करना एक प्रॉक्सी सर्वर के साथ काम करने के लिए git प्राप्त करना

Java8 धाराओं में प्रसंस्करण के आदेश को सुनिश्चित करने के लिए कैसे?

मैं XML जावा ऑब्जेक्ट के अंदर सूचियों को संसाधित करना चाहता हूं। मुझे उन सभी तत्वों को संसाधित करना है ताकि मैं उन्हें प्राप्त कर सकूं।

क्या मैं इसलिए प्रत्येक stream पर sequential कॉल करना sequential ? list.stream().sequential().filter().forEach()

या क्या यह समान रूप से लंबे समय तक स्ट्रीम का उपयोग करने के लिए पर्याप्त है क्योंकि मैं समानतावाद का उपयोग नहीं करता हूं? list.stream().filter().forEach()

वेब के समाधान से एकत्रित समाधान "Java8 धाराओं में प्रसंस्करण के आदेश को सुनिश्चित करने के लिए कैसे?"

आप गलत प्रश्न पूछ रहे हैं आप sequential बनाम parallel बारे में पूछ रहे हैं, जबकि आप क्रम में वस्तुओं को संसाधित करना चाहते हैं, इसलिए आपको आदेश देने के बारे में पूछना होगा। यदि आपके पास एक आदेश दिया हुआ प्रवाह है और संचालन करने के लिए जो आदेश को बनाए रखने की गारंटी देता है, तो इससे कोई फर्क नहीं पड़ता कि स्ट्रीम समानांतर या अनुक्रमिक में संसाधित है या नहीं; कार्यान्वयन क्रम बनाए रखेगा

आदेश दिया गया संपत्ति समानांतर बनाम अनुक्रमिक से अलग है। यदि आप किसी HashSet पर stream() को कॉल करते हैं तो एक List stream() पर कॉल करते हुए स्ट्रीम को HashSet किया जाता है, तो एक ऑर्डर किए गए स्ट्रीम को रिटर्न करता है ध्यान दें कि आप ऑर्डरिंग अनुबंध जारी करने के लिए unordered() कॉल कर सकते हैं और प्रदर्शन को संभावित रूप से बढ़ा सकते हैं। एक बार जब धारा में कोई आदेश नहीं होता है तो आदेश को पुनः स्थापित करने का कोई रास्ता नहीं है। (एक अनोकार्ड स्ट्रीम को आदेश में बदलने का एकमात्र तरीका sorted करने के लिए कॉल करना है, हालांकि, परिणामस्वरूप क्रम मूल क्रम का नहीं है)

java.util.stream पैकेज दस्तावेजों के "आदेश" अनुभाग भी देखें।

पूरे स्ट्रीम ऑपरेशन में ऑर्डर करने के रखरखाव को सुनिश्चित करने के लिए, आपको स्ट्रीम के स्रोत के दस्तावेज, सभी मध्यवर्ती संचालन और टर्मिनल ऑपरेशन का अध्ययन करना होगा कि क्या वे ऑर्डर बनाए रखते हैं या नहीं (या क्या स्रोत के पास पहले क्रम है जगह)।

यह बहुत ही सूक्ष्म हो सकता है, उदाहरण के तौर पर Stream.iterate(T,UnaryOperator) एक आदेश स्ट्रीम बनाता है जबकि Stream.generate(Supplier) एक Stream.generate(Supplier) स्ट्रीम बनाता है। ध्यान दें कि आपने अपने प्रश्न में एक आम गलती भी की थी, क्योंकि forEach कोई आदेश नहीं रखता है। यदि आप किसी गारंटीकृत ऑर्डर में स्ट्रीम के तत्वों को संसाधित करना चाहते हैं, तो आपको forEachOrdered लिए उपयोग करना होगा

इसलिए यदि आपके प्रश्न में आपकी list वास्तव में एक java.util.List , इसकी stream() विधि एक आदेश दिया स्ट्रीम वापस करेगा और filter आदेश नहीं बदलेगा। इसलिए यदि आप list.stream().filter() .forEachOrdered() कॉल करते हैं, तो list.stream().filter() .forEachOrdered() सभी तत्वों को क्रमिक रूप से संसाधित किया जाएगा, जबकि सूची के लिए। list.parallelStream().filter().forEachOrdered() तत्वों को समानांतर में संसाधित किया जा सकता है जैसे कि फिल्टर द्वारा) लेकिन टर्मिनल क्रिया को अभी भी क्रम में कहा जाएगा (जो स्पष्ट रूप से समानांतर निष्पादन के लाभ को कम करेगा)।

यदि आप, उदाहरण के लिए, एक ऑपरेशन का उपयोग करना जैसे

 List<…> result=inputList.parallelStream().map(…).filter(…).collect(Collectors.toList()); 

पूरे ऑपरेशन को समानांतर निष्पादन से फायदा हो सकता है लेकिन परिणामी सूची हमेशा सही क्रम में होगी, भले ही आप एक समानांतर या अनुक्रमिक स्ट्रीम का उपयोग करते हैं या नहीं।

list.stream ()। अनुक्रमिक ()। फ़िल्टर कर ()। foreach ()

सूची को हमेशा सूची में क्रियान्वित करेगी क्योंकि सूची में आदेश दिया जाता है।

हालांकि अगर हम उपयोग करते हैं

list.stream ()। समानांतर ()

तो बाकी कार्यों के लिए ऑर्डर की गारंटी नहीं है