मुख्य सामग्री पर जाएं
मॉड्यूल 7 · पाठ 1 का 2पाठ्यक्रम में 13/14~12 min
मॉड्यूल पाठ (1/2)

लैम्ब्डा अभिव्यक्तियाँ

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

कार्यात्मक इंटरफ़ेस

लैम्ब्डा अभिव्यक्ति का उपयोग केवल वहीं किया जा सकता है जहां कार्यात्मक इंटरफ़ेस की आवश्यकता होती है। एक कार्यात्मक इंटरफ़ेस एक इंटरफ़ेस है जो बिल्कुल एक अमूर्त विधि घोषित करता है। जावा इन इंटरफेस को वैकल्पिक @FunctionalInterface एनोटेशन के साथ चिह्नित करता है।

उपयोगकर्ता-परिभाषित कार्यात्मक इंटरफ़ेस का उदाहरण:

Java
@FunctionalInterface
interface MathOperation {
    int operate(int a, int b);
}

जावा 8 से पहले, आपको एक अनाम आंतरिक वर्ग को परिभाषित करना होगा। लैम्ब्डा के साथ, वाक्यविन्यास को सरल बनाया गया है:

Java
MathOperation addition = (a, b) -> a + b;
int result = addition.operate(5, 3); // Returns 8

लैम्ब्डा एक्सप्रेशंस की संरचना

लैम्ब्डा का मूल सिंटैक्स है:

Code
(parameters) -> { body }
  • पैरामीटर के बिना: () -> System.out.println("Hello")
  • एकल पैरामीटर: x -> x * 2 (कोष्ठक छोड़े जा सकते हैं)
  • एकाधिक पैरामीटर: (x, y) -> x + y
  • मल्टी-लाइन बॉडी: यदि बॉडी में एकाधिक कथन हैं, तो ब्रेसिज़ {} और एक स्पष्ट return कथन आवश्यक हैं।
Java
MathOperation detailedAddition = (a, b) -> {
    System.out.println("Adding...");
    return a + b;
};

जावा में मानक कार्यात्मक इंटरफ़ेस

java.util.function पैकेज कई अंतर्निहित कार्यात्मक इंटरफ़ेस प्रदान करता है:

  • Predicate<T>: T प्रकार के तर्क को स्वीकार करता है और एक बूलियन (test(T t) विधि) लौटाता है।
  • Consumer<T>: T प्रकार के तर्क को स्वीकार करता है और परिणाम लौटाए बिना एक ऑपरेशन करता है (accept(T t) विधि)।
  • Function<T, R>: एक तर्क T स्वीकार करता है और परिणाम R (apply(T t) विधि) देता है।
  • Supplier<T>: कोई तर्क स्वीकार नहीं करता है और T (get() विधि) प्रकार का मान लौटाता है।

खुद कोशिश करना

व्यायाम#java.m7.l1.e1
प्रयास: 0लोड हो रहा है...

दो पूर्णांक जोड़ने वाले लैम्ब्डा एक्सप्रेशन का उपयोग करके कैलकुलेटर इंटरफ़ेस को इंस्टेंट करके कोड को पूरा करें। फिर, 5 और 3 पास करते हुए गणना विधि लागू करें, और परिणाम प्रिंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`कैलकुलेटर एडर = (ए, बी) -> ए + बी;` घोषित करें और फिर प्रिंट कॉल के अंदर `एडर.कैलकुलेट(5, 3)` का आह्वान करें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m7.l1.e2
प्रयास: 0लोड हो रहा है...

मानक कार्यात्मक इंटरफ़ेस Predicate<String> का एक उदाहरण बनाएं जिसे लैम्ब्डा एक्सप्रेशन का उपयोग करके isLong नाम दिया गया है जो जांचता है कि स्ट्रिंग की लंबाई 5 वर्णों से अधिक है या नहीं। फिर 'हैलो वर्ल्ड' के लिए परीक्षा परिणाम प्रिंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`Predicate<String>` के लिए लैम्ब्डा एक पैरामीटर `s` लेता है और बूलियन स्थिति के रूप में `s.length() > 5` लौटाता है।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m7.l1.e3
प्रयास: 0लोड हो रहा है...

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

संपादक लोड हो रहा है...
संकेत दिखाएँ

सूची को उसके स्थान पर क्रमबद्ध करने के लिए `names.sort((s1, s2) -> s1.compareTo(s2));` का उपयोग करें।

3 प्रयासों के बाद समाधान उपलब्ध है