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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage