Wie konvertiere ich einen Iterator in einen Stream?
Ich bin auf der Suche nach einer präzisen Möglichkeit, eineIterator
zu einemStream
oder genauer gesagt, um den Iterator als Stream "anzusehen".
Aus Performancegründen möchte ich eine Kopie des Iterators in einer neuen Liste vermeiden:
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Collection<String> copyList = new ArrayList<String>();
sourceIterator.forEachRemaining(copyList::add);
Stream<String> targetStream = copyList.stream();
Aufgrund einiger Anregungen in den Kommentaren habe ich auch versucht, diese zu nutzenStream.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);
}
Ich bekomme jedoch eineNoSuchElementException
(da es keinen Aufruf von gibthasNext
)
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$InfiniteSupplyingSplit,erator$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)
Ich habe angeschautStreamSupport
undCollections
aber ich habe nichts gefunden.