web-dev-qa-db-fra.com

Java 8 flux vers fichier

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.

32
knub

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().

50
Tagir Valeev