जावा स्ट्रीम्स फॉर बिगिनर्स: एन इंट्रोडक्शन टू यूजिंग स्ट्रीम्स इन जावा

जावा स्ट्रीम्स फॉर बिगिनर्स: एन इंट्रोडक्शन टू यूजिंग स्ट्रीम्स इन जावा

जावा 8 स्ट्रीम डेवलपर्स को पूर्वनिर्धारित संचालन के एक सेट का उपयोग करके बड़े संग्रह से सटीक डेटा निकालने की अनुमति देती है।





जावा 8 के जारी होने से पहले, जावा में 'स्ट्रीम' शब्द का उपयोग स्वचालित रूप से I/O से जुड़ा होगा। हालांकि, जावा 8 ने एक धारा की शुरुआत की जिसे कम्प्यूटेशनल चरणों के एक सेट के रूप में संदर्भित किया जा सकता है जिसे आमतौर पर 'स्ट्रीम पाइपलाइन' के रूप में संदर्भित किया जाता है।





यह लेख आपको जावा 8 स्ट्रीम से परिचित कराएगा और प्रदर्शित करेगा कि वे आपकी परियोजनाओं में कैसे उपयोगी हो सकते हैं।





एक धारा क्या है?

एक स्ट्रीम एक जावा इंटरफ़ेस है जो एक स्रोत लेता है, विशिष्ट डेटा निकालने के लिए संचालन का एक सेट आयोजित करता है, फिर उस डेटा को उपयोग के लिए एप्लिकेशन को प्रदान करता है। अनिवार्य रूप से, यह आपको सामान्यीकृत डेटा के संग्रह से विशेष डेटा निकालने की अनुमति देता है।

धाराएँ कैसे काम करती हैं

एक स्ट्रीम पाइपलाइन हमेशा एक स्रोत से शुरू होती है। स्रोत का प्रकार उस डेटा के प्रकार पर निर्भर करता है जिसके साथ आप काम कर रहे हैं, लेकिन दो अधिक लोकप्रिय हैं सरणियाँ और संग्रह।



संग्रह को प्रारंभिक स्ट्रीम में बदलने के लिए, आपको जोड़ना होगा धारा() स्रोत के लिए कार्य। यह स्रोत को स्ट्रीम पाइपलाइन में रखेगा जहां कई अलग-अलग मध्यवर्ती संचालन (जैसे .) फ़िल्टर () तथा क्रमबद्ध करें () ) इस पर काम कर सकते हैं।

सभी आवश्यक मध्यवर्ती संचालन किए जाने के बाद, आप एक टर्मिनल ऑपरेशन शुरू कर सकते हैं (जैसे प्रत्येक के लिए() ), जो स्रोत से पहले निकाले गए डेटा का उत्पादन करेगा।





धाराओं के बिना जीवन

जावा 8 को 2014 में जारी किया गया था, लेकिन इससे पहले, जावा डेवलपर्स को अभी भी सामान्य डेटा के संग्रह से विशेष डेटा निकालने की आवश्यकता थी।

डीवीडी से मूवी कैसे रिप करें

मान लें कि आपके पास यादृच्छिक वर्णों की एक सूची है जो अद्वितीय स्ट्रिंग मान बनाने के लिए यादृच्छिक संख्याओं के साथ संयुक्त हैं, लेकिन आप केवल वे मान चाहते हैं जो वर्ण C से शुरू होते हैं और आप परिणाम को आरोही क्रम में व्यवस्थित करना चाहते हैं। इस तरह आप उस डेटा को बिना स्ट्रीम के निकालेंगे।





सम्बंधित: जावा में स्ट्रिंग्स का उपयोग करने के बारे में आपको क्या जानना चाहिए

धाराओं के बिना मूल्यों को छानना और छांटना उदाहरण


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//declare the array list will store needed values
List requiredValues = new ArrayList();
//extracting the required values and storing them in reqquiredValues
randomValues.forEach(value -> {
if(value.startsWith('C')) {
requiredValues.add(value);
}
});
//sort the requiredValues in ascending order
requiredValues.sort((String value1, String value2) -> value1.compareTo(value2));
//print each value to the console
requiredValues.forEach((String value) -> System.out.println(value));
}
}

आपको सरणी सूची घोषित करने और आरंभ करने की भी आवश्यकता होगी चाहे आप स्ट्रीम या निष्कर्षण की किसी अन्य विधि का उपयोग कर रहे हों। यदि आप धाराओं का उपयोग कर रहे थे तो आपको क्या करने की आवश्यकता नहीं होगी, आवश्यक मान रखने के लिए एक नया चर घोषित करें, और न ही उपरोक्त उदाहरण में कोड की अन्य पांच प्लस लाइनें बनाएं।

सम्बंधित: Java में Arrays पर ऑपरेशंस कैसे बनाएं और निष्पादित करें

उपरोक्त कोड कंसोल में निम्न आउटपुट उत्पन्न करता है:


C11
C12
C13
C14
C15
C16

धाराओं के साथ जीवन

प्रोग्रामिंग में, दक्षता काफी कम कोड के साथ समान परिणाम उत्पन्न करने के लिए बोलती है। यह वही है जो एक प्रोग्रामर के लिए एक स्ट्रीम पाइपलाइन करता है। तो अगली बार जब कोई पूछे: आपके प्रोजेक्ट में स्ट्रीम का उपयोग करना क्यों महत्वपूर्ण है? सीधे शब्दों में कहें: धाराएं कुशल प्रोग्रामिंग का समर्थन करती हैं।

ऊपर दिए गए हमारे उदाहरण को जारी रखते हुए, इस तरह से स्ट्रीम शुरू करने से पूरा प्रोग्राम बदल जाता है।

एक स्ट्रीम उदाहरण के साथ मूल्यों को छानना और छांटना


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

उपरोक्त कोड दर्शाता है कि स्ट्रीम इंटरफ़ेस कितना शक्तिशाली है। यह यादृच्छिक सरणी मानों की एक सूची लेता है और इसका उपयोग करके इसे एक स्ट्रीम में बदल देता है धारा() समारोह। स्ट्रीम को फिर एक सरणी सूची में घटा दिया जाता है जिसमें आवश्यक मान होते हैं (जो कि सभी मान से शुरू होते हैं सी ), का उपयोग फ़िल्टर () समारोह।

जैसा कि आप ऊपर के उदाहरण में देख सकते हैं, सी मानों को सरणी सूची में बेतरतीब ढंग से व्यवस्थित किया जाता है। यदि आप पाइपलाइन में इस बिंदु पर स्ट्रीम प्रिंट करना चाहते हैं, तो मान सी15 पहले छापा जाएगा। इसलिए क्रमबद्ध करें () नए सरणी को आरोही क्रम में पुनर्व्यवस्थित करने के लिए फ़ंक्शन को स्ट्रीम पाइपलाइन में पेश किया जाता है।

स्ट्रीम पाइपलाइन में अंतिम कार्य है a प्रत्येक के लिए() समारोह। यह एक टर्मिनल फ़ंक्शन है जिसका उपयोग स्ट्रीम पाइपलाइन को रोकने के लिए किया जाता है और कंसोल में निम्न परिणाम उत्पन्न करता है:


C11
C12
C13
C14
C15
C16

स्ट्रीम इंटरमीडिएट संचालन

इंटरमीडिएट ऑपरेशंस की एक विस्तृत सूची है जिसका उपयोग स्ट्रीम पाइपलाइन में किया जा सकता है।

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

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

यदि उपरोक्त हमारी सरणी सूची में C से शुरू होने वाला कोई भी मान लोअरकेस में था, और हमने उन पर समान मध्यवर्ती संचालन किया, तो हमें निम्नलिखित परिणाम प्राप्त होंगे।

लोअरकेस मानों पर फ़िल्टर और सॉर्ट संचालन करना उदाहरण


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

उपरोक्त कोड कंसोल में निम्नलिखित मान उत्पन्न करेगा:


C11
C12
C14
C15

उपरोक्त आउटपुट के साथ एकमात्र समस्या यह है कि यह सभी का सटीक रूप से प्रतिनिधित्व नहीं करता है सी हमारी सरणी सूची में मान। इस छोटी सी त्रुटि को ठीक करने का एक अच्छा तरीका स्ट्रीम पाइपलाइन में एक और मध्यवर्ती ऑपरेशन शुरू करना है; इस ऑपरेशन को के रूप में जाना जाता है नक्शा() समारोह।

मानचित्र फ़ंक्शन उदाहरण का उपयोग करना


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//transforms all lower case characters to upper case,
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().map(String::toUpperCase).filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

NS नक्शा() फ़ंक्शन किसी वस्तु को एक अवस्था से दूसरी अवस्था में रूपांतरित करता है; ऊपर हमारे उदाहरण में यह सरणी सूची में सभी लोअरकेस वर्णों को अपरकेस वर्णों में बदल देता है।

रखना नक्शा() समारोह से ठीक पहले फ़िल्टर () फ़ंक्शन से शुरू होने वाले सभी मानों को पुनः प्राप्त करता है सी सरणी सूची से।

उपरोक्त कोड कंसोल में निम्नलिखित परिणाम उत्पन्न करता है, सफलतापूर्वक सभी का प्रतिनिधित्व करता है सी सरणी सूची में मान।


C11
C12
C13
C14
C15
C16

अन्य तीन मध्यवर्ती संचालन जो आप अपने अनुप्रयोगों में उपयोग कर सकते हैं उनमें शामिल हैं:

  • झांकना ()
  • सीमा ()
  • छोड़ें()

जावा 8 धाराएँ कुशल कोड के निर्माण की सुविधा प्रदान करती हैं

जावा 8 स्ट्रीम के साथ आप कोड की एक पंक्ति के साथ एक बड़े स्रोत से अतिरिक्त विशिष्ट, प्रासंगिक डेटा निकाल सकते हैं। जब तक आप प्रारंभिक शामिल करते हैं धारा() फ़ंक्शन और एक टर्मिनल ऑपरेटर, आप मध्यवर्ती संचालन के किसी भी संयोजन का उपयोग कर सकते हैं जो आपके लक्ष्य के लिए उपयुक्त आउटपुट प्रदान करते हैं।

मैकबुक प्रो ब्लूटूथ डिवाइस नहीं ढूंढ रहा है

यदि आप हमारे में संलग्न कोड की लाइन के बारे में सोच रहे हैं फ़िल्टर () समारोह; इसे 'लैम्ब्डा एक्सप्रेशन' के रूप में जाना जाता है। लैम्ब्डा एक्सप्रेशन जावा 8 के साथ पेश की गई एक और विशेषता है, और इसमें बहुत सारे नगेट्स हैं जो आपको उपयोगी लग सकते हैं।

साझा करना साझा करना कलरव ईमेल जावा 8 लैम्बडास का त्वरित परिचय

यदि आप एक जावा प्रोग्रामर हैं और आप जावा 8 लैम्ब्डा के बारे में अधिक जानने में रुचि रखते हैं, तो इस लेख में हम लैम्ब्डा सिंटैक्स और उपयोग पर करीब से नज़र डालने जा रहे हैं।

आगे पढ़िए
संबंधित विषय
  • प्रोग्रामिंग
  • जावा
  • कोडिंग ट्यूटोरियल
लेखक के बारे में कदीशा कीन(21 लेख प्रकाशित)

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

कदीशा कीन . की अन्य फ़िल्में-टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें