जावा इंट्रीस्ट्रीम iterate बनाम उत्पन्न जब उपयोग करने के लिए क्या?


19

ऐसा लगता IntStream.iterateहै कि यह केवल एक हल्का ऑर्डर किया गया संस्करण है IntStream.generate। क्या यह सच है? यदि नहीं, तो मूल अंतर क्या है?

जवाबों:


21

ध्यान दें कि उनके हस्ताक्षर कैसे भिन्न हैं:

  • generateएक लेता है IntSupplier, जिसका अर्थ है कि आपको बिना कुछ दिए जा रहे हैं। उदाहरण usages में एक ही पूर्णांक की एक स्थिर धारा बनाना, यादृच्छिक पूर्णांक की एक धारा बनाना शामिल है। ध्यान दें कि स्ट्रीम का प्रत्येक तत्व पिछले तत्व पर निर्भर नहीं करता है।

  • iterateएक seedऔर एक लेता है IntUnaryOperator, जिसका अर्थ है कि आप पिछले तत्व के आधार पर प्रत्येक तत्व उत्पन्न करने वाले हैं । उदाहरण के लिए, एक सम्मिलित रूप से परिभाषित अनुक्रम बनाने के लिए यह उपयोगी है। इस मामले में, प्रत्येक तत्व को पिछले एक पर निर्भर होना चाहिए ।


इसलिए iterate के मामले का उपयोग करें - जब राज्य को बचाने की आवश्यकता होती है - यह मुख्य अंतर है। राज्य को कहीं और स्टोर करने की आवश्यकता है। और Iterate का आदेश दिया गया है, जबकि उत्पन्न अव्यवस्थित है जो समानतावाद के लिए व्यवहार्य है
JJ Beam

8
  1. IntStream.iterateएक रिटर्न का आदेश दियाIntStream तो दूसरी तरफ IntStream.generateरिटर्न एक अव्यवस्थितIntStream जो समानांतर धारा पाइपलाइनों को गति देने में मदद कर सकता है।

  2. IntStream.generate Javadoc में निर्दिष्ट यादृच्छिक या निरंतर मान उत्पन्न करने के लिए पसंद किया जाता है, मुझे लगता है कि स्ट्रीम की विशेषताओं के लिए सबसे अधिक संभावना होगी।


5

आदेश के अलावा, उपयोग भी थोड़ा अलग है। आइए विधि हस्ताक्षर पर नजर डालें:

  • iterate(int seed, IntUnaryOperator f)
  • generate(IntSupplier s)

Iterate ने स्पष्ट रूप से आरंभिक मान को पैरामीटर और एकात्मक ऑपरेटर के रूप में दिया है जिसका उपयोग पिछले से अगला मान उत्पन्न करने के लिए किया जाता है। यहां ऑपरेटर आंतरिक स्थिति के बिना आसानी से अपरिवर्तनीय हो सकता है और किसी भी मुद्दे के बिना समानांतर में कई स्थानों पर पुन: उपयोग किया जा सकता है।

जनरेटर का उपयोग करता है। वे या तो निरंतर या यादृच्छिक संख्या प्रदान कर सकते हैं या श्रृंखला (1, 2, 3, ...) प्रदान करने के लिए आंतरिक स्थिति की आवश्यकता होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.