Java Academy · पाठ

Supplier और Consumer

मान उत्पन्न करें और उनका उपयोग करें

पाठ 2, कुल 4 में से13 चरण

Supplier और Consumer, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

Supplier क्या करता है

Supplier<T> कोई तर्क नहीं लेता और T प्रकार का मान उत्पन्न करता है।

  • इसकी विधि T get() है।
  • यह आलसी या स्थगित मान-निर्माण के लिए उपयुक्त है।
import java.util.function.Supplier;

public class Main {
    public static void main(String[] args) {
        Supplier<String> greeting = () -> "Hello!";
        System.out.println(greeting.get());
    }
}

Supplier आलसी होते हैं

Supplier के अंदर का कोड केवल तब चलता है जब get को बुलाया जाता है। इसलिए ऐसे महँगे डिफ़ॉल्ट मानों के लिए Supplier आदर्श हैं जिनकी आपको कभी आवश्यकता न भी पड़े।

import java.util.function.Supplier;

public class Main {
    public static void main(String[] args) {
        Supplier<Integer> expensive = () -> {
            System.out.println("computing...");
            return 42;
        };
        System.out.println("before get");
        System.out.println(expensive.get());
    }
}

डिफ़ॉल्ट के लिए Supplier

कई एपीआई Supplier स्वीकार करते हैं, ताकि वे मान की गणना केवल आवश्यकता पड़ने पर कर सकें, जैसे Optional.orElseGet।

import java.util.Optional;

public class Main {
    public static void main(String[] args) {
        Optional<String> name = Optional.empty();
        System.out.println(name.orElseGet(() -> "default"));
    }
}

Consumer क्या करता है

Consumer<T> एक मान स्वीकार करता है और कुछ भी वापस नहीं करता (void)।

  • इसकी विधि void accept(T t) है।
  • इसका उपयोग प्रिंट करने या लॉग दर्ज करने जैसे पार्श्व प्रभावों के लिए किया जाता है।
import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Consumer<String> printer = s -> System.out.println("Got: " + s);
        printer.accept("data");
    }
}

forEach के साथ Consumer

आपको Consumer सबसे अधिक Iterable.forEach और Stream.forEach में दिखाई देगा।

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> items = List.of("a", "b", "c");
        items.forEach(item -> System.out.println(item));
    }
}

andThen से Consumers को जोड़ना

Consumer andThen का समर्थन करता है, जो एक ही इनपुट पर दो Consumers को क्रम से चलाता है।

import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Consumer<String> first = s -> System.out.println("upper: " + s.toUpperCase());
        Consumer<String> second = s -> System.out.println("len: " + s.length());
        first.andThen(second).accept("hello");
    }
}

दो इनपुट के लिए BiConsumer

BiConsumer<T, U> दो तर्क स्वीकार करता है और कुछ भी वापस नहीं करता। Map.forEach कुंजी-मान युग्मों पर पुनरावृत्ति करने के लिए इसका उपयोग करता है।

import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> ages = Map.of("Ann", 30, "Bob", 25);
        ages.forEach((name, age) -> System.out.println(name + "=" + age));
    }
}

Consumers के रूप में विधि-संदर्भ

System.out::println जैसा विधि-संदर्भ एक साफ़-सुथरा Consumer है।

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> nums = List.of(1, 2, 3);
        nums.forEach(System.out::println);
    }
}

Supplier और Consumer को मिलाना

Supplier अपने उत्पन्न मान को सीधे Consumer तक पहुँचा सकता है, जिससे पहले-उत्पन्न-फिर-उपयोग का सरल प्रवाह बनता है।

import java.util.function.Supplier;
import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Supplier<String> source = () -> "payload";
        Consumer<String> sink = s -> System.out.println("received " + s);
        sink.accept(source.get());
    }
}

ऑब्जेक्ट लौटाने वाले प्रदाता

जब किसी आर्ग्युमेंट की आवश्यकता नहीं होती, तो कंस्ट्रक्टर ClassName::new के ज़रिए स्वाभाविक प्रदाता बन जाते हैं।

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

public class Main {
    public static void main(String[] args) {
        Supplier<List<String>> factory = ArrayList::new;
        List<String> list = factory.get();
        list.add("x");
        System.out.println(list);
    }
}

पार्श्व प्रभाव बनाम शुद्ध फ़ंक्शन

यह अंतर याद रखें:

  • Supplier: कोई इनपुट नहीं लेता, आउटपुट उत्पन्न करता है।
  • Consumer: इनपुट लेता है, कोई आउटपुट उत्पन्न नहीं करता (पार्श्व प्रभाव)।
  • Function: इनपुट लेता है और आउटपुट लौटाता है।
import java.util.function.Supplier;
import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Supplier<Integer> dice = () -> 4;
        Consumer<Integer> show = n -> System.out.println("rolled " + n);
        show.accept(dice.get());
    }
}

त्वरित जाँच

कौन-सा कार्यात्मक इंटरफ़ेस कोई आर्ग्युमेंट नहीं लेता और कोई मान लौटाता है?

पुनरावलोकन

आपने फ़ंक्शनल तरीके से मान उत्पन्न और उपभोग किए:

  • Supplier<T> आलसी उत्पादन के लिए get() का उपयोग करता है।
  • Consumer<T> पार्श्व प्रभावों के लिए accept() का उपयोग करता है और andThen के साथ श्रृंखलाबद्ध होता है।
  • BiConsumer<T,U> दो इनपुट संभालता है, जैसा कि Map.forEach में होता है।
  • विधि संदर्भ और कंस्ट्रक्टर संदर्भ, दोनों को संक्षिप्त बनाते हैं।
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “Supplier और Consumer” पाठ निःशुल्क है?

हाँ—“Supplier और Consumer” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Supplier और Consumer” में मैं क्या सीखूँगा?

मान उत्पन्न करें और उनका उपयोग करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“Supplier और Consumer” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Function और BiFunction
  2. Supplier और Consumer
  3. Predicate और Composition
  4. कस्टम फ़ंक्शनल इंटरफ़ेस
← Java Academy पर वापस जाएँ