में स्ट्रीम के लिए उपयोग के मामले स्कैला में एक स्ट्रीम क्लास है जो एक इटेटरेटर की तरह है। विषय Difference between Iterator and Stream in Scala? दोनों के बीच समानताएं और मतभेदों में कुछ अंतर्दृष्टि प्रदान करता है।स्कैला
कैसे एक धारा का उपयोग करने देखकर बहुत सरल है, लेकिन मैं बहुत सारे आम उपयोग-मामलों में जहां मैं अन्य कलाकृतियों के बजाय एक धारा का प्रयोग करेंगे नहीं है।
विचारों मैं अभी है:
- आप एक अनंत श्रृंखला का उपयोग करने की जरूरत है। लेकिन यह मेरे लिए एक सामान्य उपयोग-मामले की तरह प्रतीत नहीं होता है, इसलिए यह मेरे मानदंडों के अनुरूप नहीं है। (अगर यह आम है तो मुझे सही करें और मेरे पास सिर्फ एक अंधेरा स्थान है)
- यदि आपके पास डेटा की एक श्रृंखला है जहां प्रत्येक तत्व की गणना की आवश्यकता है लेकिन आप कई बार पुन: उपयोग करना चाहेंगे। यह कमजोर है क्योंकि मैं इसे केवल एक सूची में लोड कर सकता हूं जो डेवलपर आबादी के बड़े उप-समूह के लिए अवधारणात्मक रूप से आसान है।
- शायद वहाँ डेटा के एक बड़े सेट या एक computationally महंगा श्रृंखला है और कि इसकी प्रबल संभावना है कि आइटम आप की जरूरत के सभी तत्वों पर जाकर की आवश्यकता नहीं होगी। लेकिन इस मामले में एक इटरेटर एक अच्छा मैच होगा जब तक आपको कई खोज करने की आवश्यकता न हो, उस स्थिति में आप एक सूची का उपयोग कर सकते हैं भले ही यह थोड़ा कम कुशल हो।
- डेटा की एक जटिल श्रृंखला है जिसे पुन: उपयोग करने की आवश्यकता है। फिर एक सूची का इस्तेमाल यहां किया जा सकता है। हालांकि इस मामले में दोनों मामलों का उपयोग करना उतना ही मुश्किल होगा और स्ट्रीम बेहतर होगा क्योंकि सभी तत्वों को लोड करने की आवश्यकता नहीं है। लेकिन फिर यह आम नहीं है ... या है ना?
तो क्या मुझे कोई बड़ा उपयोग याद आया है? या यह सबसे अधिक भाग के लिए एक डेवलपर वरीयता है?
धन्यवाद
एक और अंतर जो मैं जोड़ना चाहता हूं वह यह है कि 'स्ट्रीम' अपने मुख्य तत्व में कभी आलसी नहीं है। 'स्ट्रीम' का प्रमुख मूल्यांकन फॉर्म में संग्रहीत किया जाता है। अगर किसी को अनुक्रम की आवश्यकता होती है जहां अनुरोध किए जाने तक कोई तत्व (सिर सहित) गणना नहीं की जाती है तो 'इटरेटर' ही एकमात्र विकल्प है। – Lii
इसके अलावा यह मुख्य तत्व में आलस्य नहीं है, यह हर तत्व का भी मूल्यांकन करता है जिसे आप छोड़ना चाहते हैं। उदाहरण: '" ए "# ::" बी "# ::" सी "# ::" डी "# :: Stream.empy [स्ट्रिंग] .ड्रॉप (3) 'मूल्यांकन करेगा" ए "," बी "," सी और डी" । "डी" क्योंकि यह सिर बन जाता है। – r90t
प्राइम नंबर जेनरेटर के लिए दिलचस्प संक्षिप्त उदाहरण।दिलचस्प बात यह है कि, यदि मैं इसे एक साधारण स्कैला कंसोल में बना देता हूं और फिर 4000 प्राइम के लिए पूछता हूं (अभ्यास में इतना अधिक नहीं, मेरे पास एक वैकल्पिक परिभाषा है जो 2 सेकंड से कम समय में 100K बनाता है) यह "जीसी ओवरहेड सीमा पार हो गई" त्रुटि के साथ स्कैला को दुर्घटनाग्रस्त करता है । –