"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावा 8 में नेस्टेड ऑब्जेक्ट्स के साथ मल्टी-लेवल ग्रुपिंग कैसे कार्यान्वित करें?

जावा 8 में नेस्टेड ऑब्जेक्ट्स के साथ मल्टी-लेवल ग्रुपिंग कैसे कार्यान्वित करें?

2024-11-07 को प्रकाशित
ब्राउज़ करें:860

How to Implement Multi-Level Grouping with Nested Objects in Java 8?

नेस्टेड ग्रुपबी का उपयोग करके जावा 8 में मल्टी-लेवल ग्रुपिंग

यह लेख बताता है कि नेस्टेड क्लासेस से निपटते समय मल्टी-लेवल ग्रुपिंग को कैसे लागू किया जाए जावा 8. विशेष रूप से, लक्ष्य आइटमों को key1 फ़ील्ड द्वारा समूहित करना है और फिर, आइटमों के प्रत्येक समूह के लिए, उन्हें key2 फ़ील्ड द्वारा समूहित करना है। अंततः, आउटपुट बाहरी कुंजी के रूप में key1 के साथ एक मानचित्र होना चाहिए और उप-आइटम की सूची में key2 का एक मानचित्र होना चाहिए।

प्रारंभिक दृष्टिकोण इसे प्राप्त करने के लिए Collecters.groupingBy विधि का उपयोग करने का प्रयास करता है, हालांकि, यह है किसी एक आइटम को सीधे एकाधिक कुंजियों द्वारा समूहित करना संभव नहीं है। इसे दूर करने के लिए, एक फ़्लैटमैप ऑपरेशन का उपयोग किया जाता है।

एक विधि में संग्रह करने से पहले वस्तुओं और उप-आइटमों के संयोजन को पकड़ने के लिए Map.entrySet का उपयोग करके एक अस्थायी जोड़ी बनाना शामिल है। जावा 9 में उपलब्ध अन्य दृष्टिकोण, फ्लैटमैपिंग कलेक्टर का लाभ उठाता है, जो सीधे कलेक्टर में फ्लैटमैप ऑपरेशन करने में सक्षम बनाता है।

यहां फ्लैटमैप समाधान है:

Map>> result = pojo.getItems().stream()
    .flatMap(item -> item.getSubItems().stream()
        .map(sub -> new AbstractMap.SimpleImmutableEntry(item.getKey1(), sub)))
    .collect(Collectors.groupingBy(AbstractMap.SimpleImmutableEntry::getKey,
                Collectors.mapping(Map.Entry::getValue,
                    Collectors.groupingBy(SubItem::getKey2))));

जावा 8 में कस्टम कलेक्टर का उपयोग करने वाला एक विकल्प:

static  Collector flatMapping(
    Function super T,? extends Stream extends U>> mapper,
    Collector super U,A,R> downstream) {

    BiConsumer acc = downstream.accumulator();
    return Collector.of(downstream.supplier(),
        (a, t) -> { try(Stream extends U> s=mapper.apply(t)) {
            if(s!=null) s.forEachOrdered(u -> acc.accept(a, u));
        }},
        downstream.combiner(), downstream.finisher(),
        downstream.characteristics().toArray(new Collector.Characteristics[0]));
}

इस कस्टम कलेक्टर का उपयोग निम्नानुसार किया जा सकता है:

Map>> result = pojo.getItems().stream()
    .collect(Collectors.groupingBy(Item::getKey1,
                Collectors.flatMapping(item -> item.getSubItems().stream(),
                    Collectors.groupingBy(SubItem::getKey2))));
विज्ञप्ति वक्तव्य यह आलेख यहां पुनर्मुद्रित है: 1729730703 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3