Utilisez Files # write (Path, Iterable <? Extends CharSequence> lines, OpenOption ...)
comme exemple.
Stream<String> stream = Stream.of("foo", "bar", "baz");
Iterable<String> iterable = stream::iterator;
Files.write(Paths.get("test.txt"), iterable);
Ou
Stream<CharSequence> stream = Stream.of("foo", "bar", "baz");
Files.write(Paths.get("test.txt"), stream::iterator);
Au fait
Stream<String> stream = Stream.of("foo", "bar", "baz");
//Erreur de compilation
Files.write(Paths.get("test.txt"), stream::iterator);
//Cela va passer
Files.write(Paths.get("test.txt"), (Iterable<String>)stream::iterator);
Stream / BaseStream a une méthode appelée ʻiterator () mais n'implémente pas Iterable. La raison semble être que ʻIterable # iterator ()
peut être appelé à plusieurs reprises.
[ʻIterable # iterator () ](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Iterable.html#iterator--) renverra un itérateur Seulement cela est écrit, mais [
BaseStream # iterator ()`](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/BaseStream.html#iterator -) Indique clairement qu'il s'agit d'une opération de terminaison, c'est-à-dire qu'elle ne peut être appelée qu'une seule fois.
Référence: Pourquoi Stream
Par conséquent, gardez à l'esprit que si vous transmettez facilement la méthode de conversion décrite ci-dessus à une classe qui utilise Iterable, une exception d'exécution peut se produire en fonction de l'implémentation.
Recommended Posts