जवाबों:
ध्यान दें कि उनके हस्ताक्षर कैसे भिन्न हैं:
generate
एक लेता है IntSupplier
, जिसका अर्थ है कि आपको बिना कुछ दिए जा रहे हैं। उदाहरण usages में एक ही पूर्णांक की एक स्थिर धारा बनाना, यादृच्छिक पूर्णांक की एक धारा बनाना शामिल है। ध्यान दें कि स्ट्रीम का प्रत्येक तत्व पिछले तत्व पर निर्भर नहीं करता है।
iterate
एक seed
और एक लेता है IntUnaryOperator
, जिसका अर्थ है कि आप पिछले तत्व के आधार पर प्रत्येक तत्व उत्पन्न करने वाले हैं । उदाहरण के लिए, एक सम्मिलित रूप से परिभाषित अनुक्रम बनाने के लिए यह उपयोगी है। इस मामले में, प्रत्येक तत्व को पिछले एक पर निर्भर होना चाहिए ।
IntStream.iterate
एक रिटर्न का आदेश दियाIntStream
तो दूसरी तरफ IntStream.generate
रिटर्न एक अव्यवस्थितIntStream
जो समानांतर धारा पाइपलाइनों को गति देने में मदद कर सकता है।
IntStream.generate
Javadoc में निर्दिष्ट यादृच्छिक या निरंतर मान उत्पन्न करने के लिए पसंद किया जाता है, मुझे लगता है कि स्ट्रीम की विशेषताओं के लिए सबसे अधिक संभावना होगी।
आदेश के अलावा, उपयोग भी थोड़ा अलग है। आइए विधि हस्ताक्षर पर नजर डालें:
iterate(int seed, IntUnaryOperator f)
generate(IntSupplier s)
Iterate ने स्पष्ट रूप से आरंभिक मान को पैरामीटर और एकात्मक ऑपरेटर के रूप में दिया है जिसका उपयोग पिछले से अगला मान उत्पन्न करने के लिए किया जाता है। यहां ऑपरेटर आंतरिक स्थिति के बिना आसानी से अपरिवर्तनीय हो सकता है और किसी भी मुद्दे के बिना समानांतर में कई स्थानों पर पुन: उपयोग किया जा सकता है।
जनरेटर का उपयोग करता है। वे या तो निरंतर या यादृच्छिक संख्या प्रदान कर सकते हैं या श्रृंखला (1, 2, 3, ...) प्रदान करने के लिए आंतरिक स्थिति की आवश्यकता होती है।