पहला, वे सभी गैर-सख्त हैं । कार्यों से संबंधित एक विशेष गणितीय अर्थ है, लेकिन, मूल रूप से, इसका मतलब है कि वे अग्रिम की बजाय ऑन-डिमांड गणना कर रहे हैं।
Streamवास्तव में एक आलसी सूची है। वास्तव में, स्काला में, एक Streama Listजिसका taila है lazy val। एक बार गणना करने के बाद, एक मूल्य गणना की जाती है और पुन: उपयोग किया जाता है। या, जैसा कि आप कहते हैं, मानों को कैश किया गया है।
एक का Iteratorउपयोग केवल एक बार किया जा सकता है क्योंकि यह एक संग्रह में एक ट्रैवर्सल सूचक है , और अपने आप में संग्रह नहीं है। क्या यह स्काला में विशेष बनाता है तथ्य यह है कि आप इस तरह के रूप में परिवर्तन लागू कर सकते हैं mapऔर filterऔर बस एक नया मिलता है Iteratorजो केवल इन परिवर्तनों लागू होगी जब आप अगले तत्व के लिए पूछना।
स्काला पुनरावृत्तियों को प्रदान करता था, जिसे रीसेट किया जा सकता था, लेकिन सामान्य तरीके से समर्थन करना बहुत कठिन है, और उन्होंने संस्करण 2.8.0 नहीं बनाया।
दृश्य को बहुत हद तक डेटाबेस दृश्य की तरह देखा जाता है। यह परिवर्तन की एक श्रृंखला है जो एक "आभासी" संग्रह का उत्पादन करने के लिए एक संग्रह पर लागू होती है। जैसा कि आपने कहा था, जब भी आपको इसमें से तत्वों को लाने की आवश्यकता होती है, तो सभी परिवर्तनों को फिर से लागू किया जाता है।
दोनों Iteratorऔर विचारों में उत्कृष्ट स्मृति विशेषताएं हैं। Streamअच्छा है, लेकिन, स्काला में, इसका मुख्य लाभ अनंत अनुक्रम लिख रहा है (विशेष रूप से अनुक्रम पुनरावर्ती रूप से परिभाषित)। एक कर सकते हैं के सभी रखने से बचने Streamसुनिश्चित करें कि आप अपने लिए एक संदर्भ नहीं रखते बनाकर हालांकि, स्मृति में, head(उदाहरण के लिए, का उपयोग करके defबजाय valपरिभाषित करने के लिए Stream)।
विचारों द्वारा किए गए दंड के कारण, आमतौर पर forceइसे परिवर्तनों को लागू करने के बाद करना चाहिए , या इसे एक दृश्य के रूप में रखना चाहिए यदि केवल कुछ तत्वों को देखने के कुल आकार की तुलना में कभी भी प्राप्त होने की उम्मीद है।