जावा 8 के साथ छंटनी हुड के नीचे कैसे काम करती है?


10

जब मैं फोन करता हूं तो Stream.sort(..)तत्वों का एक नया सरणी बनाया जाता है और धारा नए बनाए गए सॉर्ट किए गए सरणी पर पुनरावृत्त होती है?

दूसरे शब्दों में, कैसे जावा 8 स्ट्रीम sortहुड के तहत करता है?


मुझे इस प्रश्न के साथ एक डाउन वोट क्यों मिलता है ???
सूचित

2
आपका प्रश्न उचित और घटता हुआ है। हालांकि, अमोन के जवाब पर आपकी टिप्पणी ... ugh: |
एंड्रेस एफ।

@AndresF। इससे पहले कि मैं यह टिप्पणी करता, डाउन वोट भी आ गया। यह एक कारण है कि मैं बहुत परेशान था।
सूचित 2

टिप्पणियों का कोई कारण नहीं है, वैसे भी। सवाल अपनी योग्यता पर खड़ा है, और यह मेरी राय में मान्य है। मैंने इसे उकेरा।
एंड्रेस एफ।

जवाबों:


10

जावा मानक पुस्तकालय कोड (और कुछ अन्य पुस्तकालयों) के माध्यम से खोजने के लिए आप grepcode.com का उपयोग कर सकते हैं । दुर्भाग्य से, धारा कार्यान्वयन कोड बल्कि सार है। एक अच्छा प्रारंभिक बिंदु आंतरिक java.util.stream.SortedOpsवर्ग है जो एक धारा को एक क्रमबद्ध धारा में बदल देता है।

वर्तमान कार्यान्वयन (मानक पुस्तकालय कंटेनरों की धाराओं के लिए प्रयोग किया जाता है) यह एक नहीं सेशन यदि धारा पहले से ही क्रमबद्ध हो जाता है बनाता है, यदि धारा के आकार में जाना जाता है (एक सरणी का उपयोग करता है SizedRefSortingSink), या एक ArrayList में सभी तत्वों को जम जाता है आकार है अगर अज्ञात ( RefSortingSink)।

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

अन्य धाराओं को अपना कार्यान्वयन प्रदान करना Stream.sorted()होगा, जो संभवतः समान होगा।


1
@ इनफॉर्मेड मैं यह सुझाव नहीं देना चाहता कि लैम्ब्डा या धाराएं "हुड के नीचे बकवास" होंगी। वे दोनों अविश्वसनीय रूप से सुविधाजनक हैं, भले ही धाराओं के बारे में विवरण अन्य जावा अवधारणाओं की तुलना में असामान्य रूप से जटिल हो। यदि आप अपनी पूर्व-निर्धारित धारणा से चिपके रहना चाहते हैं कि ये उपकरण बेकार या हानिकारक हैं, तो आप अनावश्यक रूप से खुद को सीमित कर रहे हैं।
आमोन

1
@amon - सहमति व्यक्त की, प्लस धाराएँ हूड के तहत बहुस्तरीय समानांतर कार्यान्वयन को रोल करने की संभावना प्रदान करती हैं, बिना आवेदन को बदले। और धारा के कार्यान्वयन की जटिलता ठीक उसी से आती है। यह सिर्फ सुविधा से अधिक है, यह सही अमूर्तता है। ओपी के लिए - मेरा सुझाव है कि आप मास्टेरिंग लैम्बडास पढ़ें ... अगर आप यह समझना चाहते हैं कि लैम्ब्डा और धाराएं इतनी अधिक क्यों हैं कि सिर्फ सुविधाजनक विशेषताएं हैं।
यूरी स्टीनश्रेइबर

3
@InformedA: लैम्ब्डा को लगभग 80 साल हो गए हैं और हर मौजूदा मुख्यधारा की प्रोग्रामिंग भाषा में मौजूद है। धाराएं लगभग 40 साल से हैं, और इसी तरह हर मुख्य धारा के संग्रह ढांचे में मौजूद हैं। उन्हें विभिन्न चीजों (पुनरावृत्तियों, आलसी सूचियों, प्रगणकों, प्रगणकों) कहा जा सकता है, लेकिन वे वहां हैं। लैम्ब्डा और आलसी सूची कुछ सबसे पुराने और सबसे स्थिर सार हैं, और वे हर नई सनक, प्रचार, प्रतिमान, आंदोलन, कार्यप्रणाली, प्रौद्योगिकी, भाषा, ओएस, फ्रेमवर्क, पुस्तकालय से बच गए हैं। जो उन्हें देखने लायक बनाता है।
जोर्ग डब्ल्यू मित्तग

2
@InformedA Java, प्रोग्रामिंग लैंग्वेज, JVM पर चलने वाले बाईटेकोड का सिर्फ एक बकवास एब्स्ट्रैक्शन है। JVM स्वयं C (या C ++, I भूल जाते हैं) में लिखा गया एक बकवास शब्द है। सी और सी ++ विधानसभा भाषा पर सिर्फ बकवास सार हैं। यहां तक ​​कि असेंबली भाषा भी माइक्रोकोड पर एक बकवास एब्सट्रैक्शन है, जो सर्किट पर भी एक बकवास एब्सट्रैक्शन है (ठीक है, मैं बीच में कुछ चरणों को याद कर सकता हूं)। आप कह सकते हैं कि सॉफ्टवेयर में उपयोगी हर चीज किसी चीज पर "बकवास" है।
एंड्रेस एफ।

3
@InformedA मेरी ईमानदार सलाह यह है कि आप ऐसी भाषा सीखने की कोशिश करें जो जावा की तुलना में कार्यात्मक प्रोग्रामिंग के लिए अधिक उन्मुख हो। यहां तक ​​कि अगर आप अपने दिन के काम के लिए इसका इस्तेमाल कभी नहीं करते हैं, तो आप प्रोग्रामिंग भाषाओं और उनके डिज़ाइन विकल्पों की समझ हासिल करेंगे जो आपको जावा के साथ मदद करेंगे :)
एंड्रेस एफ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.