लोड हो रहा है...

Java में Lambda

तीर के साथ forEach को छोटी कार्रवाई दें। Cue.java में सार्वजनिक class Cue रखें, java.util.ArrayList इम्पोर्ट करें, टाइप की गई सूची में "oak" रखें, और names.forEach(n -> System.out.println(n)); कॉल करें। javac Cue.java से कंपाइल करें और java Cue चलाएँ। स्क्रीन पर oak दिखना चाहिए। दूसरा डेमो "pine" जोड़ता है ताकि स्क्रीन oak, फिर pine दिखाए। वैकल्पिक Streams अगले पेज के लिए छोड़ दें। यह पाठ forEach को पारित lambda है, Generics get(0) डेमो नहीं और कमांड-लाइन args नहीं।

एक एलिमेंट, एक lambda प्रिंट

Cue.java खोलें। सार्वजनिक class नाम Cue रखें। बची हुई Generics Bin डेमो, Program Arguments Flag रन, Box Scanner प्रॉम्प्ट, और Shelf इतिहास हटाएँ अगर वे lambda कहानी दबा दें। प्रोग्राम टाइपिंग का इंतज़ार नहीं करना चाहिए और लॉन्च शब्दों की ज़रूरत नहीं।
ऊपर इम्पोर्ट जोड़ें:
import java.util.ArrayList;
Cue.main के अंदर टाइप की गई सूची बनाएँ, एक शब्द जोड़ें, और forEach को lambda दें:
ArrayList<String> names = new ArrayList<>();
names.add("oak");
names.forEach(n -> System.out.println(n));
हिस्सा n -> System.out.println(n) lambda है। n एक एलिमेंट के लिए पैरामीटर नाम है। तीर -> उस एलिमेंट के लिए चलने वाले बॉडी की ओर इशारा करता है। forEach "oak" के लिए वह बॉडी एक बार बुलाता है। स्क्रीन oak दिखाती है।

Cue forEach lambda prints oak

java
import java.util.ArrayList;

public class Cue {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("oak");
        names.forEach(n -> System.out.println(n));
    }
}

जिस फ़ोल्डर में Cue.java है वहाँ से javac Cue.java चलाएँ। जब ब्रेस और सेमिकोलन मेल खाते हैं, javac अपनी कोई लाइन नहीं लिखता। फिर java Cue चलाएँ — java Cue.java नहीं। एक सार्वजनिक class रखें ताकि नाम Cue से मिले।
एक बार रन देखें। Java Cue.main से शुरू होता है। सूची में "oak" है। forEach lambda लेता है। पहले (और अकेले) एलिमेंट के लिए n "oak" है और println oak लिखता है। इस पठन आकार में कोई get(0) नहीं बुलाता। Integer Bin डेमो से 3 नहीं प्रिंट होता। args[0] नहीं पढ़ता।
स्क्रीन देखते हुए शुरुआती नियम बोलें: forEach सूची चलता है; lambda हर एलिमेंट की कार्रवाई है; तीर पैरामीटर और बॉडी अलग करता है। इस पेज पर Streams पाइपलाइन न बनाएँ। Streams अगले वैकल्पिक पाठ का इंतज़ार करता है। इस पठन फ़ाइल में lambda को पूरे नाम वाले मेथड से न बदलें — तीर वाला रूप रखें।
अगर बची Bin फ़ाइल में अभी भी केवल names.get(0) से oak दिखे, Cue पर जाएँ और forEach लाइन रखें। अगर javac तीर ठुकराए, जाँचें कि -> टाइप किया और lambda forEach(...) के अंदर है।

दो एलिमेंट, वही lambda

वही सार्वजनिक class Cue रखें। forEach से पहले दूसरा शब्द जोड़ें:
names.add("oak");
names.add("pine");
names.forEach(n -> System.out.println(n));
फिर javac Cue.java से कंपाइल करें और java Cue चलाएँ। स्क्रीन oak, फिर pine दिखाती है। forEach क्रम से हर एलिमेंट पर lambda एक बार चलाता है। lambda बॉडी नहीं बदलती। केवल सूची की लंबाई बदली।

Cue forEach lambda prints oak then pine

java
import java.util.ArrayList;

public class Cue {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("oak");
        names.add("pine");
        names.forEach(n -> System.out.println(n));
    }
}

एक बार रन देखें। पहली कॉल: n "oak" है, oak प्रिंट करें। दूसरी कॉल: n "pine" है, pine प्रिंट करें। दोनों डेमो को दो पठन आकार रखें। पहले एक lambda प्रिंट साबित करें। फिर दो एलिमेंट पर वही lambda साबित करें। दोनों आकार में इम्पोर्ट, टाइप सूची, और n -> System.out.println(n) साझा है।
अगर forEach के बजाय println(names) से पूरी सूची प्रिंट करें, ब्रैकेट और कॉमा दिखते हैं — वह अलग आदत है। यह पेज lambda से प्रति एलिमेंट एक प्रिंट रखता है।

Lambda न तो केवल Generics न ही Streams

Generics ने ArrayList<String> में एलिमेंट टाइप नाम दिया। Lambda इस पेज पर अलग नाम वाला मेथड लिखे बिना forEach को छोटी कार्रवाई देती है। बाद के वैकल्पिक पेज पर Streams सूची के और चरण जोड़ेगा। आज इन तीन कामों को एक शुरुआती फ़ाइल में न मिलाएँ।
यहाँ oak वह सूची एलिमेंट है जिसे forEach घूमता है। यह Flag से args[0] नहीं और Scanner जवाब नहीं। जब बची Bin फ़ाइल अभी भी केवल get(0) प्रिंट करे, उसे इतिहास छोड़ें और Cue की forEach लाइन रखें। जब बची Flag फ़ाइल अभी भी java Flag oak माँगे, वह लॉन्च आदत अलग रखें और सादा java Cue चलाएँ।
बिना तीर के javac कार्रवाई को lambda नहीं मानता। बिना forEach के इस पठन आकार में lambda चलने की जगह नहीं। अभ्यास में दोनों टुकड़े साथ रखें। इस पेज पर .stream().map जैसी Streams वाक्यरचना उस पाठ तक न रखें, भले कहीं और Stream शब्द देखा हो।

Streams से पहले फ़ोल्डर जाँच

सफल कंपाइल के बाद फ़ोल्डर सूची बनाएँ। Cue.java और Cue.class साथ दिखने चाहिए। स्रोत बदलें, सेव करें, javac Cue.java चलाएँ, फिर java Cue। "pine" जोड़ने के बाद कंपाइल छोड़ें तो पुराना .class पुरानी एक-लाइन स्क्रीन दिखा सकता है।
अगर javac डुप्लिकेट सार्वजनिक class की शिकायत करे, केवल Cue सार्वजनिक रखें। अगर स्क्रीन एक लाइन में [oak, pine] दिखाए, आपने सूची ऑब्जेक्ट प्रिंट किया — lambda के अंदर println के साथ forEach पर वापस जाएँ। अगर कुछ न प्रिंट हो, forEach से पहले add चला पुष्टि करें।
इस पेज पर lambda की जगह Bin get(0) न चिपकाएँ। रन कमांड में Flag लॉन्च शब्द न चिपकाएँ। वैकल्पिक lambda काम है तीर बॉडी के साथ forEach।

वैकल्पिक Streams से पहले

आप सार्वजनिक class Cue, ArrayList इम्पोर्ट, "oak" जोड़ना, names.forEach(n -> System.out.println(n)); कॉल, oak देखना, फिर "pine" जोड़कर oak फिर pine देखना जारी रख सकते हैं। javac Cue.java से कंपाइल करें और java Cue चलाएँ। अगला वैकल्पिक पेज Streams है।
साफ़ lambda जोड़ी के लिए Cue डेमो रखें। forEach अभ्यास करते समय Generics Bin फ़ाइलें इस पेज से दूर रखें। forEach अभ्यास करते समय Program Arguments Flag फ़ाइलें इस पेज से दूर रखें। उस पाठ तक Streams काम इस पेज से दूर रखें। ये आदतें आगे बढ़ने से पहले चेकपॉइंट हैं। एक-शब्द स्क्रीन oak दिखाए या दो-शब्द स्क्रीन oak फिर pine, इस पाठ के लिए Lambda का काम हो गया और वैकल्पिक रास्ते पर Streams के लिए तैयार हैं।
फ़ोल्डर में आखिरी बार: एक सार्वजनिक Cue, इम्पोर्ट मौजूद, टाइप ArrayList<String>, n -> System.out.println(n) के साथ forEach, Scanner इंतज़ार नहीं, लॉन्च शब्द ज़रूरी नहीं। खुले डेमो पर फिर javac Cue.java और java Cue चलाएँ। अगर स्क्रीन अभी भी oak या oak फिर pine दिखाए, Lambda आकार मज़बूत है और अगले पेज पर वैकल्पिक Streams पर जा सकते हैं। हर पठन में एक साफ़ forEach आदत रखें ताकि हर बार वही नक्शा सिखे।

🧠 अपने ज्ञान की परीक्षा करें

शुरू करने के लिए तैयार

अपने ज्ञान की परीक्षा करें

इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं

❓
5
प्रश्न
🎯
70%
पास करने के लिए
♾️
∞
समय
🔄
∞
प्रयास

📝 निर्देश

  • हर प्रश्न को ध्यान से पढ़ें
  • हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
  • आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
  • आपकी प्रगति शीर्ष पर दिखाई जाएगी