Java Academy · पाठ

नेस्टेड संग्रहों के लिए flatMap

flatMap का उपयोग करके नेस्टेड सूचियों, Optional श्रृंखलाओं और फ़ाइल-पंक्ति संरचनाओं को समतल कीजिए

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

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

भीतरी संग्रहों की समस्या

जब stream का प्रत्येक तत्व किसी दूसरे संग्रह में map होता है, तो map आपको Stream<List<T>> देता है। flatMap भीतरी stream को मिलाकर एक समतल Stream<T> बना देता है।

List<List<Integer>> nested = List.of(List.of(1,2), List.of(3,4), List.of(5));
// With map:
Stream<List<Integer>> s = nested.stream().map(l -> l); // Stream<List<Integer>>
// With flatMap:
Stream<Integer> flat = nested.stream().flatMap(List::stream); // Stream<Integer>
flat.forEach(System.out::println); // 1 2 3 4 5

flatMap बनाम map

map(f) प्रत्येक तत्व पर f लागू करता है और परिणाम को उसी रूप में रखता है। flatMap(f) f को लागू करता है, जो एक stream लौटाता है, और फिर उन सभी stream को एक में जोड़ देता है।

// map: List<String> -> Stream<Stream<Character>>
Stream<Stream<Character>> nested = List.of("hi","bye").stream()
    .map(s -> s.chars().mapToObj(c -> (char)c));
// flatMap: List<String> -> Stream<Character>
Stream<Character> flat = List.of("hi","bye").stream()
    .flatMap(s -> s.chars().mapToObj(c -> (char)c));

ऑर्डर और आइटम को समतल करना

सामान्य उपयोग: प्रत्येक ऑर्डर में आइटम की एक सूची होती है। सभी ऑर्डर के सभी आइटम का एक समतल stream प्राप्त करें।

List<String> allItems = orders.stream()
    .flatMap(order -> order.getItems().stream())
    .collect(Collectors.toList());
System.out.println(allItems);

वैकल्पिक मानों के साथ flatMap

किसी Optional को शून्य या एक-तत्व वाले stream में बदलने के लिए उस पर stream() (Java 9+) का उपयोग करें। फिर flatMap एक Stream<Optional<T>> को Stream<T> में समेट देता है।

List<Optional<String>> maybes = List.of(Optional.of("a"), Optional.empty(), Optional.of("c"));
List<String> values = maybes.stream()
    .flatMap(Optional::stream)  // Java 9+
    .collect(Collectors.toList());
System.out.println(values); // [a, c]

एकाधिक फ़ाइलों से सभी पंक्तियाँ पढ़ना

flatMap नेस्टेड लूप के बिना फ़ाइलों की सूची की सभी पंक्तियों को एक stream में जोड़ना आसान बनाता है।

List<Path> files = List.of(Path.of("a.txt"), Path.of("b.txt"));
List<String> allLines = files.stream()
    .flatMap(p -> {
        try { return Files.lines(p); }
        catch (IOException e) { return Stream.empty(); }
    })
    .collect(Collectors.toList());

स्ट्रिंग को शब्दों में विभाजित करना

प्रत्येक वाक्य को शब्दों में विभाजित करें और शब्दों की आवृत्ति गिनने के लिए सभी शब्दों को एक stream में समतल करें।

List<String> sentences = List.of("hello world", "java streams rock");
Map<String, Long> freq = sentences.stream()
    .flatMap(s -> Arrays.stream(s.split("\\s+")))
    .collect(Collectors.groupingBy(w -> w, Collectors.counting()));
System.out.println(freq);

Map.entrySet के साथ flatMap

श्रेणियों से आइटम की सूचियों वाले map को सभी आइटम के stream में समतल करें।

Map<String, List<String>> catalog = Map.of(
    "fruit", List.of("apple","banana"),
    "veg",   List.of("carrot","pea"));
List<String> all = catalog.values().stream()
    .flatMap(List::stream)
    .sorted()
    .collect(Collectors.toList());
System.out.println(all); // [apple, banana, carrot, pea]

flatMap में NullPointerException से बचना

यदि फ़ंक्शन किसी stream के बजाय null लौटा सकता है, तो रिक्त मान की जाँच करें या Stream.empty() लौटाएँ, ताकि NullPointerException से बचा जा सके।

departments.stream()
    .flatMap(dept -> dept.getEmployees() == null
        ? Stream.empty()
        : dept.getEmployees().stream())
    .forEach(System.out::println);

flatMap से अलग-अलग शब्दों की गिनती

संक्षिप्त डेटा प्रोसेसिंग के लिए flatMap, distinct और count को मिलाएँ।

long distinctWords = sentences.stream()
    .flatMap(s -> Arrays.stream(s.toLowerCase().split("[^a-z]+")))
    .filter(w -> !w.isEmpty())
    .distinct()
    .count();
System.out.println("Distinct: " + distinctWords);

मूल प्रकार वाले stream के लिए flatMapToInt

मूल प्रकार वाले stream में समतल करते समय बॉक्सिंग से बचने के लिए flatMapToInt, flatMapToLong और flatMapToDouble का उपयोग करें।

int totalQuantity = orders.stream()
    .flatMapToInt(order -> order.getItems().stream().mapToInt(Item::getQuantity))
    .sum();
System.out.println("Total qty: " + totalQuantity);

प्रदर्शन संबंधी टिप्पणी

प्रत्येक flatMap आह्वान एक stream परत जोड़ता है। बहुत बड़े डेटा-समुच्चयों में अनेक छोटे भीतरी संग्रह होने पर, वस्तु निर्माण का अतिरिक्त खर्च घटाने के लिए पुनरावृत्तिमूलक तरीकों या Spliterator पर विचार करें।

त्वरित जाँच

flatMap, map से अलग क्या करता है?

पुनरावलोकन

flatMap प्रत्येक तत्व को stream में बदलता है और सभी stream को एक में मिला देता है। इसका उपयोग नेस्टेड संग्रहों को समतल करने, वैकल्पिक मानों को जोड़ने, स्ट्रिंग को विभाजित करने और कई फ़ाइलें पढ़ने के लिए करें। बॉक्सिंग से बचने के लिए flatMapToInt का उपयोग करें।

शुरुआत निःशुल्क

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

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

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

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

क्या “नेस्टेड संग्रहों के लिए flatMap” पाठ निःशुल्क है?

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

“नेस्टेड संग्रहों के लिए flatMap” में मैं क्या सीखूँगा?

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

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

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

“नेस्टेड संग्रहों के लिए flatMap” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. नेस्टेड संग्रहों के लिए flatMap
  2. समानांतर स्ट्रीम: प्रदर्शन और कमियाँ
  3. Spliterator: समानांतरीकरण के लिए विभाजन
  4. iterate और generate से अनंत स्ट्रीम
← Java Academy पर वापस जाएँ