बस हर किसी की तरह, मैं अभी भी नई जावा 8 स्ट्रीम एपीआई की जटिलताओं (और उन्हें प्यार) सीख रहा हूं। मेरे पास धाराओं के उपयोग से संबंधित एक प्रश्न है। मैं एक सरल उदाहरण प्रदान करूंगा।जावा 8 स्ट्रीम संग्रह में किसी आइटम पर काम कर सकते हैं, और फिर इसे हटा सकते हैं?
जावा स्ट्रीम हमें Collection
लेने की अनुमति देता है, और इसके सभी तत्वों की धारा प्राप्त करने के लिए stream()
विधि का उपयोग करता है। इसके भीतर, filter()
, map()
, और forEach()
जैसी कई उपयोगी विधियां हैं, जो हमें सामग्री पर लैम्ब्डा संचालन का उपयोग करने की अनुमति देती हैं।
मैं (सरलीकृत) कोड है कि कुछ इस तरह दिखता है:
set.stream().filter(item -> item.qualify())
.map(item -> (Qualifier)item).forEach(item -> item.operate());
set.removeIf(item -> item.qualify());
विचार जो एक निश्चित क्वालीफायर से मेल सेट में सभी आइटम, की मैपिंग प्राप्त करने के लिए, और फिर उन के माध्यम से संचालित है। ऑपरेशन के बाद, वे कोई और उद्देश्य नहीं देते हैं, और मूल सेट से हटा दिया जाना चाहिए। कोड अच्छी तरह से काम करता है, लेकिन मैं इस भावना को हिला नहीं सकता कि Stream
में एक ऑपरेशन है जो एक ही पंक्ति में मेरे लिए ऐसा कर सकता है।
यदि यह जावाडॉक्स में है, तो मैं इसे देख सकता हूं।
क्या एपीआई से ज्यादा परिचित कोई ऐसा कुछ देखता है?
+1; धाराओं का उपयोग न करें ताकि आप एक ही पंक्ति पर अपने कोड को फिट कर सकें। लूप अक्सर स्ट्रीमिंग समाधानों की तुलना में अधिक पठनीय होते हैं, भले ही वे अधिक वर्बोज़ हों। – dimo414
मैं 'removeIf()' में राज्य-परिवर्तन कोड डालने में थोड़ा संकोच करता हूं, हालांकि मुझे विश्वास है कि यह सैद्धांतिक रूप से काम करेगा। इसके अतिरिक्त, मेरी स्थिति खुद को कार्यात्मक प्रोग्रामिंग के लिए उधार देती है, इसलिए धाराओं की मेरी ज़रूरत सबकुछ एक ही पंक्ति में पैक करने से परे होती है; लेकिन आपका शुक्रिया। –
लैम्ब्डा अभिव्यक्ति के साथ 'removeIf' का उपयोग करना पूरी तरह से कानूनी है और इसे इस तरह इस्तेमाल किया जाना चाहिए। राज्य परिवर्तन संग्रह एपीआई धारा का हिस्सा नहीं है। – hussachai