स्ट्रीम सूचियों की तरह हैं जो उनके सदस्यों को आवश्यकतानुसार उत्पन्न करते हैं। एक बार तत्व उत्पन्न हो जाने के बाद, इसे स्ट्रीम में रखा जाता है और पुन: उपयोग किया जाता है।
उदाहरण के लिए:
lazy val naturals: Stream[Int] = Stream.cons(0, naturals.map{_ + 1})
आप प्राकृतिक संख्या की एक धारा दे देंगे। अगर मैं
naturals(5)
फोन यह तत्व 0-5 पैदा करते हैं और वापस जाने के 5 होगा, अगर मैं तो फोन
naturals(8)
यह पहली बार 6 तत्वों का पुन: उपयोग और 3 अधिक उत्पन्न होगा।
यदि आप स्मृति उपयोग के बारे में चिंतित हैं, तो आप Stream.drop(num)
का उपयोग num
तत्वों के साथ शुरू से हटाए गए तत्वों के साथ कर सकते हैं, जिससे पुराने समूह के साथ कटा हुआ तत्व कचरा हो सकता है। उदाहरण के लिए:
naturals(5) //returns 5
val truncated = naturals.drop(4)
truncated(5) //returns 9
स्रोत
2011-12-19 20:00:41
आपको 'स्ट्रीम की 'Iterator' के रूप में नहीं सोचना चाहिए, बल्कि 'सूची' के रूप में नहीं होना चाहिए जिसका मूल्यांकन देरी हो सकती है। [यह प्रश्न और इसके उत्तर] (http://stackoverflow.com/questions/1527962/difference-between-iterator-and-stream-in-scala) मदद कर सकता है। – Philippe