तो, आप यहां जावा में धाराओं के बारे में जानने आए हैं, लेकिन उस प्रकार की जलधाराओं के बारे में नहीं जहां लोग मछली पकड़ने जाते हैं या जल प्रवाह होता है। हम डेटा स्ट्रीम के बारे में बात कर रहे हैं, जो जावा 8 में पेश की गई एक शक्तिशाली सुविधा है जो डेटा के साथ काम करना बहुत आसान बना देती है। चाहे आप इसके लिए बिल्कुल नए हों या आपने इसे आज़माया हो, लेकिन इसे पूरा नहीं कर सके, चिंता न करें। मैं आपको पूरी यात्रा सरल, समझने में आसान भाषा में बताऊंगा।
तैयार? आइए जावा स्ट्रीम्स में गोता लगाएँ!
ए स्ट्रीम डेटा को अनुक्रम में संसाधित करने का एक तरीका है। कल्पना करें कि आपके पास वस्तुओं की एक सूची है, और आप उन वस्तुओं के साथ कुछ करना चाहते हैं (फ़िल्टर, सॉर्ट, मानचित्र, आदि)। एक स्ट्रीम आपको वह सब साफ़ और कुशल तरीके से करने देती है। यह एक असेंबली लाइन की तरह है जहां आपका डेटा संसाधित होने तक विभिन्न चरणों से होकर गुजरता है।
स्ट्रीम के बारे में याद रखने योग्य मुख्य बातें:
सिर्फ फॉर लूप का उपयोग क्यों नहीं किया जाता या संग्रहों में सीधे हेरफेर क्यों नहीं किया जाता? खैर, इसके तीन मुख्य कारण हैं:
आइए दो मुख्य प्रकार के स्ट्रीम ऑपरेशन पर एक नज़र डालें: इंटरमीडिएट और टर्मिनल।
ये वे ऑपरेशन हैं जो डेटा तैयार करते हैं लेकिन तुरंत अंतिम परिणाम नहीं देते हैं। इन्हें "कार्यशाला" चरणों के रूप में सोचें।
फ़िल्टर()
यह एक छलनी की तरह है। यह किसी शर्त के आधार पर तत्वों का चयन करता है। उदाहरण के लिए, यदि आप पूर्णांकों की सूची से केवल सम संख्याएँ चाहते हैं, तो आप फ़िल्टर() का उपयोग करेंगे।
java Copy code Listnumbers = Arrays.asList(1, 2, 3, 4, 5); List evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); // Output: [2, 4]
फ़िल्टर क्यों? फ़िल्टर() के बिना, आपको सूची के माध्यम से मैन्युअल रूप से लूप करना होगा और केवल मेल खाने वाले तत्वों को एक नई सूची में जोड़ना होगा। फ़िल्टर() आपको इसे एक साफ़ चरण में करने देता है।
नक्शा()
यह एक ट्रांसफार्मर है। यह एक तत्व लेता है और कुछ अलग लौटाता है। उदाहरण के लिए, यदि आपके पास स्ट्रिंग्स की एक सूची है और आप प्रत्येक स्ट्रिंग की लंबाई चाहते हैं:
java Copy code Listwords = Arrays.asList("apple", "banana", "cherry"); List lengths = words.stream() .map(String::length) .collect(Collectors.toList()); // Output: [5, 6, 6]
मैप क्यों? मैप() का उपयोग तब किया जाता है जब आपको प्रत्येक तत्व को किसी अन्य चीज़ में बदलने की आवश्यकता होती है, जैसे स्ट्रिंग्स की सूची को उनकी लंबाई की सूची में परिवर्तित करना।
विशिष्ट()
यह एक डुप्लिकेट फ़िल्टर की तरह है। यह एक स्ट्रीम से डुप्लिकेट तत्वों को हटा देता है।
java Copy code Listnumbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5); List distinctNumbers = numbers.stream() .distinct() .collect(Collectors.toList()); // Output: [1, 2, 3, 4, 5]
अलग क्यों? एक सामान्य सूची में, आपको डुप्लिकेट के लिए मैन्युअल रूप से जांच करने की आवश्यकता होगी। विशिष्ट() यह आपके लिए एक पंक्ति में करता है।
क्रमबद्ध()
यह आपके डेटा को प्राकृतिक क्रम में क्रमबद्ध करता है (या यदि आप चाहें तो कस्टम क्रम में)।
java Copy code Listnames = Arrays.asList("Charlie", "Alice", "Bob"); List sortedNames = names.stream() .sorted() .collect(Collectors.toList()); // Output: ["Alice", "Bob", "Charlie"]
सॉर्ट क्यों किया गया? सॉर्टिंग लॉजिक को स्वयं लिखने के बजाय, सॉर्टेड() आपके लिए इसे संभालता है।
ये वे हैं जो अंतिम परिणाम उत्पन्न करते हैं, और वे संपूर्ण स्ट्रीम के प्रसंस्करण को ट्रिगर करते हैं। इन्हें "निकास बिंदु" के रूप में सोचें।
इकट्ठा करना()
यह सबसे आम टर्मिनल ऑपरेशन है। यह स्ट्रीम के परिणामों को इकट्ठा करता है और उन्हें एक सूची, सेट या अन्य संग्रह में रखता है।
java Copy code Listnames = Arrays.asList("Charlie", "Alice", "Bob"); List upperNames = names.stream() .map(String::toUpperCase) .collect(Collectors.toList()); // Output: ["CHARLIE", "ALICE", "BOB"]
संकलित क्यों? आप अपनी स्ट्रीम के परिणामों को एक संग्रह में एकत्रित करने के लिए लगभग हमेशा कलेक्ट() का उपयोग करेंगे। यह आपका अंतिम पड़ाव है।
प्रत्येक के लिए()
यदि आपको परिणाम की आवश्यकता नहीं है और आप केवल प्रत्येक आइटम पर एक क्रिया करना चाहते हैं (जैसे उन्हें प्रिंट करना), तो forEach() आपका मित्र है।
java Copy code numbers.stream() .forEach(System.out::println);
प्रत्येक के लिए क्यों? यह साइड-इफेक्ट्स के लिए बिल्कुल सही है, जैसे कंसोल पर डेटा प्रिंट करना या फ़ाइल पर लिखना।
कम करना()
reduce() डेटा का एक समूह लेता है और इसे एक परिणाम में उबाल देता है। उदाहरण के लिए, संख्याओं की सूची का योग करें:
java Copy code int sum = numbers.stream() .reduce(0, Integer::sum); // Output: 15
कम क्यों करें? जब आपको मूल्यों को एक ही परिणाम में संयोजित या संचित करने की आवश्यकता होती है, तो कम करें() आपका विकल्प है।
सभी स्ट्रीम संग्रह से नहीं बनाई जाती हैं। जावा विभिन्न प्रकार के डेटा को संभालने के लिए अन्य प्रकार की स्ट्रीम प्रदान करता है:
इंटस्ट्रीम, लॉन्गस्ट्रीम, डबलस्ट्रीम
ये धाराएँ आदिम प्रकारों से निपटने के लिए विशिष्ट हैं। स्ट्रीम जैसे बॉक्सिंग और अनबॉक्सिंग मानों के बजाय, आप प्रदर्शन दंड से बचने के लिए इनका उपयोग करते हैं।
उदाहरण:
java Copy code IntStream intStream = IntStream.of(1, 2, 3, 4); int sum = intStream.sum(); // Output: 10
फ़ाइलों की धारा
आप Files.lines() का उपयोग करके फ़ाइलों से स्ट्रीम बना सकते हैं।
java Copy code try (Streamlines = Files.lines(Paths.get("data.txt"))) { lines.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); }
फ़ाइल स्ट्रीम का उपयोग क्यों करें? बड़ी फ़ाइलों से निपटते समय, सभी डेटा को मेमोरी में लोड करना कुशल नहीं हो सकता है। स्ट्रीम का उपयोग करने से आप इसे लाइन दर लाइन प्रोसेस कर सकते हैं।
अच्छा प्रश्न! आइए तुलना करें:
जावा में स्ट्रीम आपके डेटा को संसाधित करने के तरीके को सरल बनाने के बारे में हैं। संग्रह के साथ काम करते समय वे आपके कोड को अधिक पठनीय, बनाए रखने में आसान और अधिक कुशल बनाते हैं। चाहे आप डेटा को फ़िल्टर कर रहे हों, बदल रहे हों, या कम कर रहे हों, स्ट्रीम ने आपको स्पष्ट, सरल तरीकों से कवर किया है जो भारी लूप और मैन्युअल काम की आवश्यकता को खत्म करते हैं।
अब जब आप स्ट्रीम की बुनियादी बातों से अच्छी तरह सुसज्जित हैं, तो यहां क्यों रुकें? ट्विटर, लिंक्डइन पर मुझे फ़ॉलो करें, या अधिक जावा युक्तियों के लिए मेरा ब्लॉग देखें जो आपको कुछ ही समय में पेशेवर बना देगा! और यदि आपको यह मार्गदर्शिका उपयोगी लगी, तो इसे अपने साथी डेवलपर्स के साथ साझा करें—क्योंकि साझा करना देखभाल करने वाला है!
इसे आज़माने के लिए तैयार हैं? आइए उस धारा को अपने अगले प्रोजेक्ट में प्रवाहित करें!
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3