Supposons que j'ai un Java.util.stream.Stream
d'objets avec une méthode Nice toString
: Quelle est la solution la plus courte/la plus élégante pour écrire ce flux dans un fichier, une ligne par élément de flux?
Pour la lecture, il y a le Nice Files.lines
, j'ai donc pensé qu'il devait y avoir une méthode symétrique pour écrire dans un fichier, mais je n'ai pas pu en trouver une. Files.write
ne prend qu'un itérable.
Le moyen le plus court est probablement d'utiliser Files.write
avec astuce qui convertit le Stream
en Iterable
:
Files.write(Paths.get(filePath), (Iterable<String>)stream::iterator);
Par exemple:
Files.write(Paths.get("/tmp/numbers.txt"),
(Iterable<String>)IntStream.range(0, 5000).mapToObj(String::valueOf)::iterator);
Si cela semble trop hack, utilisez une approche plus explicite:
try(PrintWriter pw = new PrintWriter(Files.newBufferedWriter(
Paths.get("/tmp/numbers.txt")))) {
IntStream.range(0, 5000).mapToObj(String::valueOf).forEach(pw::println);
}
Si vous disposez d'un flux de certains objets personnalisés, vous pouvez toujours ajouter l'étape .map(Object::toString)
pour appliquer la méthode toString()
.