मैं एक संक्षिप्त तरीके से एक कन्वर्ट करने के लिए देख रहा हूँ Iterator
एक करने के लिए Stream
"दृश्य" एक धारा के रूप में इटरेटर करने के लिए या अधिक विशेष रूप से।
प्रदर्शन के कारण, मैं नई सूची में पुनरावृत्तिकर्ता की एक प्रति से बचना चाहूंगा:
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Collection<String> copyList = new ArrayList<String>();
sourceIterator.forEachRemaining(copyList::add);
Stream<String> targetStream = copyList.stream();
टिप्पणियों में कुछ सुझावों के आधार पर, मैंने भी उपयोग करने की कोशिश की है Stream.generate
:
public static void main(String[] args) throws Exception {
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream<String> targetStream = Stream.generate(sourceIterator::next);
targetStream.forEach(System.out::println);
}
हालाँकि, मुझे एक मिलता है NoSuchElementException
(क्योंकि वहाँ कोई मंगलाचरण नहीं है hasNext
)
Exception in thread "main" java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:364)
at Main$$Lambda$1/1175962212.get(Unknown Source)
at java.util.stream.StreamSpliterators$InfiniteSupplyingSpliterator$OfRef.tryAdvance(StreamSpliterators.java:1351)
at java.util.Spliterator.forEachRemaining(Spliterator.java:326)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at Main.main(Main.java:20)
मैंने देखा है StreamSupport
और Collections
मुझे कुछ नहीं मिला।
Stream.generate(iterator::next)
काम करता है?