इस सवाल का पहले से ही एक उत्तर है: < / P>
- 3 जवाब
यह एक उदाहरण है: कोड ए:
<पूर्व> files.forEach (f - & gt; {// TODO});
और दूसरे कोड बी इस तरह से उपयोग कर सकते हैं:
files.stream ()। ForEach (f - & gt; {}); स्ट्रीम ()
और नहीं स्ट्रीम ()
कोड ए द्वारा परिभाषित किया गया है
Iterable.forEach
, जबकि कोड बी stream.forEach
द्वारा परिभाषित किया गया है। Stream.forEach
की परिभाषा तत्वों को किसी भी क्रम में संसाधित करने की अनुमति देती है - अनुक्रमिक नदियों के लिए भी। (समानांतर धाराओं के लिए, stream.forEach
बहुत ही कम-से-कम तत्वों को संसाधित करेगा।)
Iterable.forEach
स्रोत से एक इटरेटर हो जाता है और इसके लिए ईकाईमैनिंग ()
कॉल करता है जहां तक मैं देख सकता हूं, संग्रह वर्गों पर स्ट्रीम.forआइख
के सभी वर्तमान (जेडीके 8) कार्यान्वयन एक स्रोत के इटरेटर में से एक स्प्लिटरेटर बनाएगा, और फिर forEachRemaining < / कोड> उस इटरेटर पर - जैसे
Iterable.forEach
करता है तो वे एक ही काम करते हैं, हालांकि धाराओं के संस्करण में कुछ अतिरिक्त सेटअप ओवरहेड है।
हालांकि, भविष्य में, यह संभव है कि धाराओं का कार्यान्वयन बदल सकता है जिससे कि यह अब मामला नहीं है।
(यदि आप स्ट्रीमिंग तत्वों को प्रसंस्करण के आदेश की गारंटी देना चाहते हैं, तो इसके बजाय ईकार्डर्ड () के लिए का उपयोग करें।)
No comments:
Post a Comment