मैं जब एक समानांतर धारा का उपयोग करने की कोशिश कर रहा है और मैं एक समाधान पता कुछ अजीब परिणाम मिल रहे हैं, लेकिन यह नहीं लगता है आदर्शसमानांतर स्ट्रीम अशक्त आइटम देता है, जावा में कैसे करना है 8
// Create the set "selected"
somethingDao.getSomethingList().parallelStream()
.filter(something -> !selected.contains(something.getSomethingId()))
.forEach(something ->
somethingSubGroupDTO.addFilterDTO(
new FilterDTO(something.getSomethingName(), something.getSomethingDescription(), false))
);
selected.clear();
somethingDao.getSomethingList
List
selected
है जो इस ऑपरेशन के दौरान संशोधित नहीं है।
somethingSubGroupDTO.addFilterDTO
एक सहायक कार्य है जो एक असीमित सूची में जोड़ता है। यही समस्या है। एक असीमित सूची के रूप में मुझे उम्मीद से सूची में कम आइटम मिलते हैं और कुछ आइटम शून्य होते हैं। अगर मैं इसे सिंक्रनाइज़ सूची में बदल देता हूं तो यह काम करता है। स्पष्ट रूप से समानांतर धारा में लॉक विवाद जोड़ना आदर्श नहीं है।
उच्च स्तर पर मुझे पता है कि ऐसा करना संभव है कि प्रत्येक स्ट्रीम अपनी प्रसंस्करण करेगी और जब वे शामिल हों तो वे एकत्र होंगे। (कम से कम मैं लॉक विवाद के बिना ऐसी प्रक्रिया की कल्पना कर सकता हूं) हालांकि, जब से मैं जावा 8 स्ट्रीम प्रोसेसिंग में नया हूं, मुझे पता नहीं है कि कैसे। मैं एक ही बिंदु पर विवाद के बिना यह वही ऑपरेशन कैसे करूं?
और यह एक सूची देता है जिसे मैं अंत में एक समय के बजाय अंत में अपने संग्रह में जोड़ सकता हूं? –
@CarlosBribiescas बिल्कुल – Tunaki
धन्यवाद, जो मेरे प्रश्न का उत्तर देता है। फॉलो अप के रूप में, क्या यह निर्धारित करना संभव है कि उसे किस सूची में एकत्र करना चाहिए ताकि अंत में ऑटो स्वतः जुड़ जाए? जरूरी नहीं, सिर्फ उत्सुक है। –