दिलचस्प पोस्ट
पैरामीटर के रूप में पासवर्ड के साथ sudo का उपयोग करें jQuery: पहले बनाम। प्रथम () सर्वश्रेष्ठ जावास्क्रिप्ट कम्प्रेसर ये जावास्क्रिप्ट bitwise ऑपरेटर्स क्या करते हैं? जैक्सन – कैसे प्रक्रिया (deserialize) नेस्टेड JSON? मुझे सबलेट आधारित अनुप्रयोग में जेडीबीसी डाटाबेस / डेटासाईट से कैसे जुड़ना चाहिए? मैं पैरामीटर की गई SQL क्वेरी कैसे बनाऊं? मैं क्यों? आर: कस्टम लेजेंड फॉर मल्टीपल लेयर जीगप्लोट क्लॉप ऑब्जेक्ट्स का उपयोग करते हुए कई ध्वनि क्लिप बजाना विजुअल स्टूडियो में बनाया विंडोज सर्विस स्थापित करें JSON वस्तुओं का मूल्य कैसे प्राप्त करें यदि इसके नाम में डॉट्स हैं? FileUpload नियंत्रण के साथ एक फ़ाइल का पूरा पथ प्राप्त करें कैसे स्प्रिंग कॉन्फिग फाइल में बीन की संपत्ति एक एन्यूम मूल्य आवंटित? एचटीएमएल फार्म डेटा का इस्तेमाल करते हुए एक जे.एस.ए. Src और data-src विशेषता के बीच सभी अंतर क्या हैं?

क्यों नहीं java.util.Collection नए स्ट्रीम इंटरफ़ेस को लागू करता है?

मैं धाराओं और लैम्ब्दास के बारे में जावा -8 चर्चा की तलाश शुरू करने के लिए कुछ समय लगा। मुझे आश्चर्य है कि आप स्ट्रीम ऑपरेशन्स को लागू नहीं कर सकते हैं, जैसे .filter() , .filter() सीधे java.util.Collection । क्या कोई तकनीकी कारण है कि java.util.Collection अंतरफलक इन स्ट्रीम कार्यों के डिफ़ॉल्ट कार्यान्वयन के साथ विस्तारित नहीं किया गया था?

थोड़ा सा Googling, मैं के पैटर्न के साथ कोडिंग लोगों के बहुत सारे उदाहरण देखें:

 List<String> list = someListExpression; List<String> anotherList = list.stream().map(x -> f(x)).collect(Collectors.toList()); 

जो बहुत अजीब हो जाता है, यदि आपके पास इन कोडों में से बहुत सारे स्ट्रीम-ऑपरेशन हैं चूंकि। .stream() और .collect() पूरी तरह से अप्रासंगिक हैं जो आप व्यक्त करना चाहते हैं, आप यह कहना चाहेंगे:

 List<String> list = someListExpression; List<String> anotherList = list.map(x -> f(x)); 

Solutions Collecting From Web of "क्यों नहीं java.util.Collection नए स्ट्रीम इंटरफ़ेस को लागू करता है?"

हां, इन निर्णयों के लिए उत्कृष्ट कारण हैं 🙂

कुंजी उत्सुक और आलसी आपरेशनों के बीच का अंतर है। आपके द्वारा दिए गए उदाहरणों में पहला सवाल दिखाते हैं कि सूची में मानचित्रण या फ़िल्टर करने से एक नई सूची उत्पन्न होती है। इस के साथ कुछ भी गलत नहीं है, लेकिन अक्सर वह नहीं होता है जो आप चाहते हैं, क्योंकि आप अक्सर जरूरत से ज्यादा काम कर रहे हैं; एक उत्सुक ऑपरेशन को प्रत्येक तत्व पर कार्य करना चाहिए और एक नया संग्रह तैयार करना होगा। यदि आप कई ऑपरेशन (फिल्टर-नक्शा-कम) लिख रहे हैं, तो आप बहुत अधिक अतिरिक्त कार्य कर रहे हैं दूसरी ओर, आलसी आपरेशनों को खूबसूरती से लिखना; यदि तुम करो:

  Optional<Person> tallestGuy = people.stream() .filter(p -> p.getGender() == MALE) .max(comparing(Person::getHeight)); 

फिल्टर और कम (अधिकतम) आपरेशन एक साथ एक पास में जुड़े हुए हैं I यह बहुत ही कुशल है

तो, क्यों नहीं सूची के अधिकार पर धारा के तरीकों को बेनकाब करें? खैर, हम इसे इस तरह से कोशिश कर रहे थे। कई अन्य कारणों के अलावा, हमने पाया कि आलसी तरीकों को filter() जैसे और removeAll() जैसे उत्सुक तरीके उपयोगकर्ताओं को भ्रमित कर रहे थे। आलसी तरीकों को एक अलग पृथक्करण में समूहबद्ध करके, यह बहुत स्पष्ट हो जाता है; List पर विधियां उन सूची को बदल देती हैं; Stream पर विधियां उन हैं जो डेटा दृश्यों पर संगत, आलसी परिचालनों में सौदा करते हैं, भले ही उस डेटा के जीवन की परवाह किए बिना।

इसलिए, जिस तरह से आप यह सुझाव देते हैं कि यह वास्तव में सरल चीजें करना चाहते हैं, लेकिन जब आप उस पर निर्माण करने की कोशिश करते हैं तो इससे अलग होना शुरू हो जाता है। अतिरिक्त stream() विधि कष्टप्रद है? ज़रूर। लेकिन डेटा संरचनाओं (जो मोटे तौर पर स्मृति में डेटा व्यवस्थित करने के बारे में हैं) और धाराओं (जो बड़े पैमाने पर कुल व्यवहार बनाते हैं) के लिए पृथक्करण को रखते हुए अलग परिष्कृत परिचालनों के लिए अलग-अलग तराजू बेहतर बनाते हैं।

अपने दूसरे प्रश्न के लिए, आप यह अपेक्षाकृत आसानी से कर सकते हैं: इस तरह से धारा के तरीकों को लागू करें:

 public<U> Stream<U> map(Function<T,U> mapper) { return convertToStream().map(mapper); } 

लेकिन यह सिर्फ ज्वार के खिलाफ तैर रहा है; बस एक कुशल धारा () विधि को लागू करने के लिए बेहतर है