Java Academy · पाठ

Spliterator: समानांतरीकरण के लिए विभाजन

डोमेन डेटा को विभाज्य स्ट्रीम स्रोत के रूप में उपलब्ध कराने वाला कस्टम Spliterator लागू कीजिए

पाठ 3, कुल 4 में से12 चरण

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

Spliterator क्या है

Spliterator (विभाजित किया जा सकने वाला इटरेटर) स्ट्रीम के पीछे काम करने वाला मूल तंत्र है। यह तत्वों पर क्रमशः चलता है और समानांतर प्रसंस्करण के लिए स्वयं को दो भागों में विभाजित कर सकता है।

Spliterator की मुख्य विधियाँ

चार मुख्य विधियाँ हैं: tryAdvance (एक तत्व पर क्रिया करना), forEachRemaining (सभी शेष तत्वों पर क्रिया करना), trySplit (दो भागों में विभाजित करना), estimateSize (तत्वों की संख्या का अनुमान)।

Spliterator<Integer> sp = List.of(1,2,3,4,5,6).spliterator();
Spliterator<Integer> half = sp.trySplit(); // splits off first ~half
half.forEachRemaining(System.out::println); // 1 2 3
sp.forEachRemaining(System.out::println);   // 4 5 6

Spliterator की विशेषताएँ

Spliterator अपनी विशेषताओं को बिट फ़्लैग के माध्यम से घोषित करते हैं: SIZED, ORDERED, DISTINCT, SORTED, NONNULL, IMMUTABLE, CONCURRENT, SUBSIZED।

Spliterator<String> sp = List.of("a","b","c").spliterator();
System.out.println(Integer.toBinaryString(sp.characteristics()));
// Characteristics include ORDERED, SIZED, SUBSIZED

trySplit कैसे काम करता है

trySplit() लगभग बचे हुए आधे तत्वों को समेटने वाला नया Spliterator लौटाता है। मूल Spliterator दूसरे आधे तत्वों को समेटता है। यदि विभाजन संभव न हो, तो null लौटाएँ।

// ArrayList Spliterator splits efficiently at midpoint:
// [0,1,2,3,4,5] -> [0,1,2] (new) + [3,4,5] (original)

कस्टम Spliterator बनाना

कस्टम डेटा संरचना को स्ट्रीम स्रोत के रूप में उपलब्ध कराने के लिए Spliterator<T> लागू करें। समानांतरीकरण सक्षम करने के लिए trySplit को परिभाषित करें।

public class RangeSpliterator implements Spliterator<Integer> {
    private int start, end;
    public RangeSpliterator(int start, int end) { this.start=start; this.end=end; }
    public boolean tryAdvance(Consumer<? super Integer> action) {
        if (start >= end) return false;
        action.accept(start++); return true;
    }
    public Spliterator<Integer> trySplit() {
        int mid = (start + end) / 2;
        if (mid <= start) return null;
        RangeSpliterator prefix = new RangeSpliterator(start, mid);
        this.start = mid; return prefix;
    }
    public long estimateSize() { return end - start; }
    public int characteristics() { return ORDERED | SIZED | SUBSIZED | IMMUTABLE; }
}

Spliterator से स्ट्रीम बनाना

किसी भी Spliterator से स्ट्रीम बनाने के लिए StreamSupport.stream(spliterator, parallel) का उपयोग करें — यह कस्टम डेटा स्रोतों और Stream API के बीच सेतु है।

Spliterator<Integer> sp = new RangeSpliterator(0, 1_000_000);
Stream<Integer> stream = StreamSupport.stream(sp, true); // true = parallel
long count = stream.filter(n -> n % 2 == 0).count();
System.out.println(count); // 500000

बाइनरी ट्री के लिए Spliterator

कस्टम Spliterator ट्री जैसी गैर-सूची संरचनाओं में समानांतरीकरण सक्षम करते हैं। trySplit बाएँ उपट्री का Spliterator लौटाता है और दाएँ उपट्री को अपने पास रखता है।

समानांतर दक्षता और विभाजन की गुणवत्ता

समानांतर स्ट्रीम डेटा को बार-बार विभाजित करती हैं, जब तक कि खंड एक थ्रेड के लिए पर्याप्त छोटे न हो जाएँ। अच्छे विभाजन के लिए estimateSize का अनुमान सटीक होना और विभाजन लगभग बराबर होना आवश्यक है।

थोक प्रसंस्करण के लिए forEachRemaining

यदि विभाजन की आवश्यकता न हो, तो लूप में tryAdvance के प्रति-तत्व अतिरिक्त खर्च से बचने वाले थोक प्रसंस्करण के लिए forEachRemaining को अधिलेखित करें।

@Override
public void forEachRemaining(Consumer<? super Integer> action) {
    for (int i = start; i < end; i++) action.accept(i);
    start = end; // mark as exhausted
}

Spliterator बनाम इटरेटर

Iterator: केवल क्रमिक प्रसंस्करण, आकार का कोई संकेत नहीं और विभाजन की सुविधा नहीं। Spliterator: समानांतर प्रसंस्करण में सक्षम, विशेषताएँ और आकार का अनुमान उपलब्ध कराता है तथा Stream API के लिए बनाया गया है।

त्वरित जाँच

विभाजन संभव न होने पर trySplit() क्या लौटाता है?

पुनरावलोकन

Spliterator समानांतर स्ट्रीम का इंजन है। कस्टम डेटा संरचनाओं को स्ट्रीम के रूप में उपलब्ध कराने के लिए tryAdvance, trySplit, estimateSize और characteristics लागू करें। समानांतर प्रसंस्करण के लिए StreamSupport.stream(sp, true) का उपयोग करें।

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

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

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

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

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

क्या “Spliterator: समानांतरीकरण के लिए विभाजन” पाठ निःशुल्क है?

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

“Spliterator: समानांतरीकरण के लिए विभाजन” में मैं क्या सीखूँगा?

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

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

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

“Spliterator: समानांतरीकरण के लिए विभाजन” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

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