2017-01-24 14 views
8

BitSet में stream() विधि है लेकिन यह Iterable इंटरफ़ेस को अन्य प्रकार की तरह कार्यान्वित नहीं करता है जो इस विधि को प्रदान करता है। क्या इसके लिए कोई विशिष्ट कारण है?बिटसेट क्यों नहीं है?

उत्तर

7

कोई नहीं (foreach, iterator, और spliterator) BitSet में प्रदान की जाती है। Iterable में stream() विधि नहीं है।

इसके अलावा BitSet की stream() विधि बिट सेट के टुकड़े पर एक धारा वापस नहीं करता है, लेकिन (जो एक तरह से TBH भ्रामक) बिट्स जिनके मान सेट कर रहे हैं की सूचकांक पर एक धारा देता है। इसलिए, तकनीकी रूप से बोलते हुए Iterable के साथ लगभग कुछ भी सामान्य नहीं लगता है।

+0

ओह, अच्छा बिंदु। मैं अपना प्रश्न संपादित करूंगा। –

-1

संभावित रूप से Boolean उदाहरण पर विस्तार से मुक्केबाजी से बचने के लिए।

अपने स्वयं के एपीआई का उपयोग करके इसे लूपिंग सभी आवंटन से बच जाएगा। Iterable में तरीकों में से

+0

एक आदिम छोटा हो सकता है मुझे लगता है कि –

+1

@fabienbk: नहीं; जावा आदिम जेनेरिक का समर्थन नहीं करता है। – SLaks

+2

एक बूलियन के लिए बॉक्सिंग वास्तव में सस्ता है: उनमें से केवल दो ही हैं, और वे कैश किए गए हैं। 'स्ट्रीम' रिटर्न 'int' सेट बिट इंडेक्स का प्रतिनिधित्व करता है; मुझे लगता है कि ओपी 'Iterable' को ऐसा करने की अपेक्षा करता है (' इंटेगर' को छोड़कर)। –

3

BitSet जावा संग्रह ढांचे का "सत्य" सदस्य नहीं है, इसलिए तकनीकी रूप से, Collection.iterator() को लागू करने की आवश्यकता नहीं है और एक प्रदान करें।

public class BitSet implements Cloneable, java.io.Serializable 

अधिक बिंदु पर, दोनों खराब तरीके से मिलेंगे।

बिटसेट जेनेरिक नहीं है, java.util.Iterator के विपरीत; बिटसेट इटरेटर के विपरीत साइड इफेक्ट्स और यादृच्छिक एड्रेसिंग के लिए विशेष विशेषताओं के साथ विज्ञापन-प्रसार विधियां प्रदान करता है।

3

एक कारण (संपूर्ण कारण नहीं, शायद) Iterable अक्षम होगा, क्योंकि बिट इंडेक्स को बॉक्स किया जाना चाहिए; धारा आदिम स्याही का उपयोग करने में सक्षम है।

जैवडोक में वर्णित अनुसार Iterable का उपयोग किए बिना बिटसेट को फिर से चलाने का एक प्रभावी तरीका है, इसलिए यह वास्तव में आवश्यक नहीं है।

संबंधित मुद्दे