जावा में कार्यात्मक प्रोग्रामिंग: A से Z तक पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा में कार्यात्मक प्रोग्रामिंग: A से Z तक

\n\n

कार्यात्मक प्रोग्रामिंग (FP) एक प्रतिमान है जिसमें गणनाओं को गणितीय फलनों की गणना के रूप में माना जाता है, जिसमें स्थिति में परिवर्तन और परिवर्तनीय डेटा से बचा जाता है। जावा, पारंपरिक रूप से एक अनिवार्य भाषा, संस्करण 8 से शुरू होकर, सक्रिय रूप से FP के तत्वों को शामिल कर रहा है। यह विशेष रूप से संग्रह और अतुल्यकालिक संचालन के साथ काम करते समय अधिक संक्षिप्त, पूर्वानुमानित और आसानी से परीक्षण योग्य कोड लिखने की अनुमति देता है।

\n\n

इस लेख में, हम जावा में FP की प्रमुख अवधारणाओं को समझेंगे: लैम्ब्डा एक्सप्रेशन से लेकर Stream API और Optional के साथ काम करने की उन्नत तकनीकों तक। आप सीखेंगे कि इन उपकरणों को व्यवहार में कैसे लागू करें ताकि आपका कोड साफ और अधिक कुशल हो जाए।

\n\n

1. मूल बातें: लैम्ब्डा एक्सप्रेशन और कार्यात्मक इंटरफ़ेस

\n\n

लैम्ब्डा एक्सप्रेशन एक अनाम विधि (फलन) लिखने का एक संक्षिप्त रूप है। यह व्यवहार को डेटा के रूप में पारित करने की अनुमति देता है। सिंटैक्स: (पैरामीटर) -> बॉडी।

\n\n

कार्यात्मक इंटरफ़ेस एक इंटरफ़ेस है जिसमें केवल एक अमूर्त विधि (SAM - Single Abstract Method) होती है। ऐसे इंटरफ़ेस को लैम्ब्डा के माध्यम से कार्यान्वित किया जा सकता है। java.util.function में प्रमुख अंतर्निहित इंटरफ़ेस:

\n\n
    \n
  • Predicate<T> — T ऑब्जेक्ट लेता है, boolean लौटाता है (विधि test)।
  • \n
  • Function<T, R> — T लेता है, R लौटाता है (विधि apply)।
  • \n
  • Consumer<T> — T लेता है, कुछ नहीं लौटाता (विधि accept)।
  • \n
  • Supplier<T> — कुछ नहीं लेता, T लौटाता है (विधि get)।
  • \n
  • UnaryOperator<T> — Function का एक विशेष मामला, जहाँ T और R एक ही प्रकार के होते हैं।
  • \n
\n\n

उदाहरण: Comparator (कार्यात्मक इंटरफ़ेस) के साथ सूची को सॉर्ट करना

\n\n
import java.util.*;\n\npublic class LambdaExample {\n    public static void main(String[] args) {\n        List<String> names = Arrays.asList("इवान", "अन्ना", "पीटर", "मारिया");\n\n        // लैम्ब्डा के बिना (अनाम वर्ग)\n        Collections.sort(names, new Comparator<String>() {\n            @Override\n            public int compare(String a, String b) {\n                return a.length() - b.length();\n            }\n        });\n\n        // लैम्ब्डा के साथ\n        Collections.sort(names, (a, b) -> a.length() - b.length());\n\n        // और भी छोटा: Comparator.comparingInt का उपयोग करें\n        names.sort(Comparator.comparingInt(String::length));\n\n        System.out.println(names); // [अन्ना, पीटर, इवान, मारिया]\n    }\n}
\n\n

उदाहरण: फ़िल्टरिंग के लिए Predicate का उपयोग

\n\n
import java.util.function.Predicate;\n\npublic class PredicateExample {\n    public static void main(String[] args) {\n        Predicate<Integer> isEven = n -> n % 2 == 0;\n        Predicate<Integer> isPositive = n -> n > 0;\n\n        System.out.println(isEven.test(4));  // true\n        System.out.println(isEven.and(isPositive).test(-2)); // false (धनात्मक नहीं)\n        System.out.println(isEven.or(isPositive).test(-3)); // true (सम नहीं, लेकिन धनात्मक? नहीं, -3 धनात्मक नहीं है)\n    }\n}
\n\n

2. Stream API: डेटा प्रोसेसिंग का शक्तिशाली उपकरण

\n\n

Stream API तत्वों का एक अनुक्रम है जो समानांतर और अनुक्रमिक संचालन का समर्थन करता है। Stream डेटा को संग्रहीत नहीं करता, बल्कि उसे रूपांतरित करता है। प्रमुख संचालन मध्यवर्ती (नया Stream लौटाते हैं) और टर्मिनल (प्रसंस्करण समाप्त करते हैं और परिणाम या दुष्प्रभाव लौटाते हैं) में विभाजित होते हैं।

\n\n

Stream API के मुख्य संचालन:

\n
    \n
  • मध्यवर्ती: filter, map, flatMap, sorted, distinct, peek, limit, skip।
  • \n
  • टर्मिनल: collec

ब्लॉग

पुस्तक अनुशंसाएँ