Verwenden Sie als Beispiel Files # write (Path, Iterable <? Extends CharSequence> -Zeilen, OpenOption ...)
.
Stream<String> stream = Stream.of("foo", "bar", "baz");
Iterable<String> iterable = stream::iterator;
Files.write(Paths.get("test.txt"), iterable);
Oder
Stream<CharSequence> stream = Stream.of("foo", "bar", "baz");
Files.write(Paths.get("test.txt"), stream::iterator);
Apropos
Stream<String> stream = Stream.of("foo", "bar", "baz");
//Kompilierungsfehler
Files.write(Paths.get("test.txt"), stream::iterator);
//Es wird vorübergehen
Files.write(Paths.get("test.txt"), (Iterable<String>)stream::iterator);
Stream / BaseStream hat eine Methode namens "iterator ()", implementiert jedoch kein Iterable. Der Grund scheint zu sein, dass "Iterable # iterator ()" wiederholt aufgerufen werden kann.
Iterable # iterator ()
gibt einen Iterator zurück. Nur das ist geschrieben, aber [BaseStream # iterator ()
](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/BaseStream.html#iterator -) Stellt eindeutig fest, dass es sich um eine Beendigungsoperation handelt, dh, dass sie nur einmal aufgerufen werden kann.
Referenz: Warum ist Stream
Beachten Sie daher, dass je nach Implementierung eine Laufzeitausnahme auftreten kann, wenn Sie die mit der obigen Methode vorgenommene Konvertierung problemlos an eine Klasse übergeben, die Iterable verwendet.
Recommended Posts