Je cherche un moyen concis de convertir un Iteratoren Streamou plus spécifiquement de "visualiser" l'itérateur comme un flux.
Pour des raisons de performances, je voudrais éviter une copie de l'itérateur dans une nouvelle liste:
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Collection<String> copyList = new ArrayList<String>();
sourceIterator.forEachRemaining(copyList::add);
Stream<String> targetStream = copyList.stream();
Sur la base des quelques suggestions dans les commentaires, j'ai également essayé d'utiliser 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);
}
Cependant, je reçois un NoSuchElementException(car il n'y a pas d'invocation de 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)
J'ai regardé StreamSupportet Collectionsje n'ai rien trouvé.
Stream.generate(iterator::next)fonctionne?