मॉड्यूल पाठ (2/2)
स्ट्रीम एपीआई
जावा में स्ट्रीम एपीआई आपको कार्यात्मक प्रोग्रामिंग का लाभ उठाते हुए, घोषणात्मक तरीके से वस्तुओं के संग्रह को संसाधित करने की अनुमति देता है। एक स्ट्रीम डेटा संग्रहीत नहीं करती है, बल्कि संचालन की एक पाइपलाइन के माध्यम से किसी स्रोत (जैसे एक सूची या एक सरणी) से तत्वों को ले जाती है।
एक स्ट्रीम पाइपलाइन में तीन भाग होते हैं:
- एक स्रोत (जैसे,
list.stream()) - शून्य या अधिक मध्यवर्ती संचालन (जो एक नई स्ट्रीम लौटाते हैं, उदाहरण के लिए,
filter,map) - एक टर्मिनल ऑपरेशन (जो अंतिम परिणाम या दुष्प्रभाव उत्पन्न करता है और स्ट्रीम को बंद कर देता है, उदाहरण के लिए,
collect,forEach,reduce)
सामान्य मध्यवर्ती संचालन
इंटरमीडिएट ऑपरेशन आलसी होते हैं: उन्हें तब तक निष्पादित नहीं किया जाता है जब तक कि टर्मिनल ऑपरेशन लागू नहीं किया जाता है।
filter(Predicate): बूलियन स्थिति के आधार पर तत्वों को फ़िल्टर करता है।map(Function): एक फ़ंक्शन लागू करके प्रत्येक तत्व को दूसरे ऑब्जेक्ट में बदल देता है।sorted(): स्ट्रीम के तत्वों को सॉर्ट करता है।
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
.filter(name -> name.startsWith("M"))
.map(name -> name.toUpperCase())
.collect(Collectors.toList()); // "MARCO"सामान्य टर्मिनल संचालन
forEach(Consumer): स्ट्रीम के प्रत्येक तत्व के लिए एक क्रिया करता है।collect(Collector): स्ट्रीम परिणामों को एक कंटेनर में एकत्रित करता है (उदाहरण के लिए,Collectors.toList()का उपयोग करके एक सूची)।reduce(identity, BinaryOperator): स्ट्रीम तत्वों को एक एकल संचयी मान में जोड़ता है।
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b); // Sums all numbers: 10खुद कोशिश करना
केवल सम संख्याओं को फ़िल्टर करने के लिए संख्याओं की स्ट्रीम का उपयोग करके कोड को पूरा करें, उन्हें इवेंस नामक एक नई सूची में एकत्र करें, और System.out.println का उपयोग करके इसे प्रिंट करें।
संकेत दिखाएँ
`numbers.stream()` को कॉल करके प्रारंभ करें, `.filter(n -> n % 2 == 0)` जोड़ें, और अंत में `.collect(Collectors.toList())` के साथ संग्रहित करें।
3 प्रयासों के बाद समाधान उपलब्ध है
मैप का उपयोग करके नाम सूची के अंदर सभी नामों को अपरकेस में बदलने के लिए स्ट्रीम का उपयोग करें, और विधि संदर्भ के साथ forEach का उपयोग करके उन्हें एक-एक करके प्रिंट करें।
संकेत दिखाएँ
टर्मिनल ऑपरेशन .forEach(System.out::println) के बाद `.map(s -> s.toUpperCase())` का उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है
स्ट्रीम का उपयोग करके संख्या सूची में सभी संख्याओं के योग की गणना करके और 0 के प्रारंभिक मान के साथ कम टर्मिनल ऑपरेशन करके कोड को पूरा करें। योग प्रिंट करें।
संकेत दिखाएँ
`numbers.stream().reduce(0, (a, b) -> a + b)` का उपयोग करें और परिणामी वेरिएबल को प्रिंट करें।
3 प्रयासों के बाद समाधान उपलब्ध है