[JAVA] [Petite histoire] Convertir Stream en Iterable

Comment faire

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);

Contexte et notes

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 n'est pas un Iterable ?

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

[Petite histoire] Convertir Stream en Iterable
Flux appris (je veux convertir la liste en carte <Integer, List>)
Convertir un tableau bidimensionnel au format csv avec l'API Java 8 Stream
Convertir un tableau potentiellement nul en flux
Je veux convertir des caractères ...
Convertir le type String en type Timestamp
Convertir en chaîne Ruby Leet
Convertir un objet sérialisable en octet []
Conversion de ○ mois en ○ années ○ mois
[Java] Introduction à l'API Stream
Comment convertir la base Java
[Java] Convertir ArrayList en tableau