मॉड्यूल पाठ (1/2)
लैम्ब्डा अभिव्यक्तियाँ
जावा 8 से शुरू होकर, कार्यात्मक प्रोग्रामिंग लैम्ब्डा एक्सप्रेशंस के माध्यम से समर्थित है। लैम्ब्डा अभिव्यक्ति अनिवार्य रूप से एक अज्ञात विधि (बिना नाम के एक फ़ंक्शन) है जिसे विधियों के तर्क के रूप में पारित किया जा सकता है या चर में संग्रहीत किया जा सकता है।
कार्यात्मक इंटरफ़ेस
लैम्ब्डा अभिव्यक्ति का उपयोग केवल वहीं किया जा सकता है जहां कार्यात्मक इंटरफ़ेस की आवश्यकता होती है। एक कार्यात्मक इंटरफ़ेस एक इंटरफ़ेस है जो बिल्कुल एक अमूर्त विधि घोषित करता है। जावा इन इंटरफेस को वैकल्पिक @FunctionalInterface एनोटेशन के साथ चिह्नित करता है।
उपयोगकर्ता-परिभाषित कार्यात्मक इंटरफ़ेस का उदाहरण:
@FunctionalInterface
interface MathOperation {
int operate(int a, int b);
}जावा 8 से पहले, आपको एक अनाम आंतरिक वर्ग को परिभाषित करना होगा। लैम्ब्डा के साथ, वाक्यविन्यास को सरल बनाया गया है:
MathOperation addition = (a, b) -> a + b;
int result = addition.operate(5, 3); // Returns 8लैम्ब्डा एक्सप्रेशंस की संरचना
लैम्ब्डा का मूल सिंटैक्स है:
(parameters) -> { body }
- पैरामीटर के बिना:
() -> System.out.println("Hello") - एकल पैरामीटर:
x -> x * 2(कोष्ठक छोड़े जा सकते हैं) - एकाधिक पैरामीटर:
(x, y) -> x + y - मल्टी-लाइन बॉडी: यदि बॉडी में एकाधिक कथन हैं, तो ब्रेसिज़
{}और एक स्पष्टreturnकथन आवश्यक हैं।
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()विधि) प्रकार का मान लौटाता है।
खुद कोशिश करना
दो पूर्णांक जोड़ने वाले लैम्ब्डा एक्सप्रेशन का उपयोग करके कैलकुलेटर इंटरफ़ेस को इंस्टेंट करके कोड को पूरा करें। फिर, 5 और 3 पास करते हुए गणना विधि लागू करें, और परिणाम प्रिंट करें।
संकेत दिखाएँ
`कैलकुलेटर एडर = (ए, बी) -> ए + बी;` घोषित करें और फिर प्रिंट कॉल के अंदर `एडर.कैलकुलेट(5, 3)` का आह्वान करें।
3 प्रयासों के बाद समाधान उपलब्ध है
मानक कार्यात्मक इंटरफ़ेस Predicate<String> का एक उदाहरण बनाएं जिसे लैम्ब्डा एक्सप्रेशन का उपयोग करके isLong नाम दिया गया है जो जांचता है कि स्ट्रिंग की लंबाई 5 वर्णों से अधिक है या नहीं। फिर 'हैलो वर्ल्ड' के लिए परीक्षा परिणाम प्रिंट करें।
संकेत दिखाएँ
`Predicate<String>` के लिए लैम्ब्डा एक पैरामीटर `s` लेता है और बूलियन स्थिति के रूप में `s.length() > 5` लौटाता है।
3 प्रयासों के बाद समाधान उपलब्ध है
स्ट्रिंग नामों की सूची को वर्णानुक्रम में सॉर्ट() विधि लागू करके और एक लैम्ब्डा एक्सप्रेशन पास करके क्रमबद्ध करें जो तुलनित्र को लागू करता है (दो स्ट्रिंग्स s1, s2 लेकर और CompareTo का उपयोग करके उनकी तुलना करें)।
संकेत दिखाएँ
सूची को उसके स्थान पर क्रमबद्ध करने के लिए `names.sort((s1, s2) -> s1.compareTo(s2));` का उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है