पर एक लिस्ट इटरेटर को सीमित करें List
की शुरुआत से अधिकांश एन तत्वों पर लौटने वाले इटरेटर को प्राप्त करने का एक आसान और तेज़ तरीका क्या है?पहले एन तत्वों (अनुकूलित)
सरल संस्करणों मैं के साथ आ सकता है:
# 1:
import com.google.common.collect.Iterators;
// ...
public static <E> Iterator<E> lengthLimitedIterator(Iterable<E> source, int maxLen) {
return Iterators.partition(source.iterator(), maxLen).next().iterator();
}
# 2:
public static <E> Iterator<E> lengthLimitedIterator(List<E> source, int maxLen) {
return source.subList(0, Math.min(source.size(), maxLen)).iterator();
}
दुर्भाग्य से दोनों संस्करणों एक अस्थायी List
जो काफी के रूप में प्रदर्शन को प्रभावित करता बनाने मैं इस विधि को एक तंग लूप में लाखों बार बुला रहा हूं।
क्या कोई अन्य लाइब्रेरी फ़ंक्शन है जिसके लिए मैं इसका उपयोग कर सकता हूं?
नोट: मैं सूची पर पुनरावृत्ति के रूप में मैं यह एक तरीका है जो अपने तर्क के रूप में पुनरावर्तक लेता है गुजर रहा से बचने नहीं कर सकते हैं और मुझे लगता है कि वर्ग संशोधित नहीं कर सकते। अपने डेकोरेटर गिनती, जो next()
द्वारा वृद्धि की जाती है, और नियंत्रण hasNext()
द्वारा प्रयोग किया जाता रहता है:
'Iterators' के अलावा, ध्यान दें कि [' Iterables' की सीमा भी है() 'विधि] (http: //docs.guava- libraries.googlecode.com/git/javadoc/com/google/common/collect/Iterables.html#limit(java.lang.Iterable,%20int))। तो यदि आपके पास 'सूची' है, तो 'Iterables.limit (aist, 3)' करना सबसे आसान है। – Jonik