Java 8 поток в файл

Предположим, что у меня есть java.util.stream.Stream объектов с некоторым приятным методом toString: Что такое кратчайшее/самое элегантное решение для записи этого потока в файл, одна строка для элемента потока?

Для чтения есть хороший Files.lines метод, поэтому я думал, что должен быть симметричный метод для записи в файл, но не смог найти его. Files.write выполняет только итерацию.

Ответы

Ответ 1

Возможно, самый короткий путь - использовать Files.write вместе с трюком который преобразует Stream в Iterable:

Files.write(Paths.get(filePath), (Iterable<String>)stream::iterator);

Например:

Files.write(Paths.get("/tmp/numbers.txt"),
     (Iterable<String>)IntStream.range(0, 5000).mapToObj(String::valueOf)::iterator);

Если он выглядит слишком хакерским, используйте более явный подход:

try(PrintWriter pw = new PrintWriter(Files.newBufferedWriter(
                     Paths.get("/tmp/numbers.txt")))) {
    IntStream.range(0, 5000).mapToObj(String::valueOf).forEach(pw::println);
}

Если у вас есть поток некоторых пользовательских объектов, вы всегда можете добавить шаг .map(Object::toString) для применения метода toString().