2014-11-11 26 views
6

पर एकत्र करने का सबसे अच्छा तरीका मैं एक अपरिवर्तनीय सूची में स्ट्रीम प्राप्त करना चाहता हूं। निम्नलिखित दृष्टिकोणों के बीच क्या अंतर है और प्रदर्शन परिप्रेक्ष्य से कौन सा बेहतर है?जावा -8 स्ट्रीम को जावा इमटेबल लिस्ट

  1. collect(Collectors.collectingAndThen(Collectors.toList(), ImmutableList::copyOf));

  2. ImmutableList.copyOf(stream.iterator());

  3. collect(Collector.of( ImmutableList.Builder<Path>::new, ImmutableList.Builder<Path>::add, (l, r) -> l.addAll(r.build()), ImmutableList.Builder<Path>::build) );

प्रदर्शन या दक्षता के लिए कुछ और मानकों,

  1. सूची/संग्रह में कई प्रविष्टियां हो सकती हैं।

  2. यदि मैं एक कस्टम तुलनित्र के साथ इंटरमीडिएट ऑपरेशन ".sorted()" का उपयोग कर सेट सॉर्ट करना चाहता हूं तो क्या होगा।

  3. फलस्वरूप, क्या हुआ अगर मैं धारा
+0

संबंधित: [मैं एक अमरूद ImmutableCollection में एक जावा 8 धारा कैसे एकत्र कर सकते हैं?] (Https: //stackoverflow.com/questions/29013250/how-can-i-collect-a-java-8-stream-into-a-guava-immutablecollection) –

उत्तर

2

मैं उम्मीद करता हूं कि 1) सबसे कुशल बनने के लिए: अतिरिक्त बिल्डरों के माध्यम से जाने से कम पढ़ने योग्य और सामान्य toList() से अधिक जीतने की संभावना नहीं है, और इटरेटर डिस्कार्ड से सूचनाओं को आकार देने की संभावना है।

(लेकिन अमरूद जावा 8 चीजें इस तरह, जिससे आप बस के लिए इंतजार कर सकते हैं के लिए समर्थन जोड़ने पर काम कर रहा है।)

+0

धन्यवाद, क्या आप कृपया विस्तार से जानकारी दे सकते हैं "पुनरावृत्त सूचनाओं की प्रतिलिपि सूचनाओं से प्रतिलिपि बनाना" – user3169330

+0

एक 'Stream.iterator()' इसका आकार नहीं जानता है। 'ToList() 'के माध्यम से जाकर आपको आकार की सूची मिलती है। यह किसी भी तरह से तर्क दिया जा सकता है, यद्यपि - जब आप 'सूची' बनाते हैं तो आप आकार देने की जानकारी खो रहे हैं, लेकिन जब आप इसे 'इमटेबल लिस्ट' पर कॉपी करते हैं तो आप इसे वापस ले लेंगे। –

3

प्रणाली के प्रदर्शन के लिए करने के लिए .parallel() जोड़ने के लिए, आप इसे मापने के लिए की जरूरत है।

प्रोग्रामिंग प्रदर्शन के लिए, सबसे स्पष्ट तरीके का उपयोग करें। अकेले उपस्थिति से, मुझे दूसरा सबसे अच्छा पसंद है, और मुझे वहां कोई स्पष्ट अक्षमता दिखाई नहीं दे रही है।

संबंधित मुद्दे