जावा में कार्यात्मक प्रोग्रामिंग: उन्नत तकनीकें और Stream API

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

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

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

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

\n\n

जावा में कार्यात्मक प्रोग्रामिंग (FP) अब केवल एक फैशनेबल प्रवृत्ति नहीं रह गई है - यह संस्करण 8 से शुरू होने वाली आधुनिक भाषा का एक अभिन्न अंग है। बुनियादी लैम्ब्डा और Stream API में महारत हासिल करने वाले डेवलपर्स के लिए, अब वह चरण आता है जहाँ गहन अवधारणाओं की समझ आवश्यक है: मोनाड, फ़ंक्शन संयोजन, आलसी गणना और अपरिवर्तनीय डेटा संरचनाएँ। यह लेख जावा में कार्यात्मक प्रोग्रामिंग की उन्नत तकनीकों के लिए समर्पित है, जो अधिक स्वच्छ, पूर्वानुमानित और समानांतर-सुरक्षित कोड लिखने में मदद करेगा।

\n\n

1. फ़ंक्शन संयोजन और करीइंग

\n\n

जावा में, कार्यात्मक इंटरफ़ेस Function, Predicate और Consumer संयोजन के लिए डिफ़ॉल्ट विधियाँ प्रदान करते हैं: andThen() और compose()। यह मध्यवर्ती चर बनाए बिना परिवर्तनों की श्रृंखला बनाने की अनुमति देता है।

\n\n

संयोजन का उदाहरण:

\n
import java.util.function.Function;\n\npublic class FunctionComposition {\n    public static void main(String[] args) {\n        Function<String, String> trim = String::trim;\n        Function<String, String> toUpper = String::toUpperCase;\n        Function<String, String> addExclamation = s -> s + "!";\n\n        // संयोजन: trim -> toUpper -> addExclamation\n        Function<String, String> process = trim.andThen(toUpper).andThen(addExclamation);\n\n        String result = process.apply("  hello world  ");\n        System.out.println(result); // HELLO WORLD!\n    }\n}
\n\n

करीइंग एकाधिक तर्कों वाले फ़ंक्शन को एक तर्क वाले फ़ंक्शनों के अनुक्रम में बदलना है। जावा में इसे नेस्टेड लैम्ब्डा के साथ अनुकरण किया जा सकता है:

\n\n
import java.util.function.Function;\n\npublic class CurryingExample {\n    // सामान्य फ़ंक्शन\n    static int add(int a, int b) { return a + b; }\n\n    // करीड संस्करण\n    static Function<Integer, Function<Integer, Integer>> curriedAdd = a -> b -> a + b;\n\n    public static void main(String[] args) {\n        // आंशिक अनुप्रयोग\n        Function<Integer, Integer> add5 = curriedAdd.apply(5);\n        System.out.println(add5.apply(3)); // 8\n        System.out.println(add5.apply(10)); // 15\n    }\n}
\n\n

करीइंग सामान्य पैटर्न के आधार पर विशेषीकृत फ़ंक्शन बनाने के लिए उपयोगी है, विशेष रूप से कॉन्फ़िगरेशन के साथ काम करते समय।

\n\n

2. Stream API के साथ उन्नत कार्य

\n\n

जावा में Stream API केवल लूप का विकल्प नहीं है। इसकी उन्नत क्षमताओं को समझने से कोड की प्रदर्शन और पठनीयता में काफी सुधार हो सकता है।

\n\n

2.1. समानांतर स्ट्रीम और विभाजक

\n

समानांतर स्ट्रीम ForkJoinPool का उपयोग करती हैं। हालाँकि, उनकी दक्षता डेटा के आकार और संचालन की प्रकृति पर निर्भर करती है। समानांतरीकरण के कस्टम प्रबंधन के लिए Spliterator का उपयोग किया जा सकता है।

\n\n
import java.util.Spliterator;\nimport java.util.stream.Stream;\nimport java.util.stream.StreamSupport;\n\npublic class CustomSpliterator {\n    public static void main(String[] args) {\n        // कस्टम विभाजक के साथ इटरेटर से स्ट्रीम बनाना\n        Spliterator<Integer> spliterator = new Spliterator<>() {\n            int current = 0;\n            @Override\n            public boolean tryAdvance(java.util.function.Consumer<? super Integer> action) {\n                if (current < 100) {\n                    action.accept(current++);\n                    return true;\n                }\n                return false;\n            }\n            @Override\n            public Spliterator<Integer> trySplit() {\n                // सरलतम विभाजन\n                int mid = current + 50;\n                if (mid >= 100) return null;\n                Spliterator<Integer> prefix = new RangeSpliterator(curre                

ब्लॉग

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