Java 8流到文件

knu*_*nub 34 java java-8 java-stream

假设我有一个java.util.stream.Stream带有一些好toString方法的对象:将这个流写入文件最短/最优雅的解决方案是什么,每个流元素一行?

对于阅读,有一个很好的Files.lines方法,所以我认为必须有一个对称的方法来写入文件,但找不到. Files.write只需要一个可迭代的.

Tag*_*eev 54

也许最短的方法是使用Files.write与沿其转换StreamIterable:

Files.write(Paths.get(filePath), (Iterable<String>)stream::iterator);
Run Code Online (Sandbox Code Playgroud)

例如:

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

如果看起来过于苛刻,请使用更明确的方法:

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

如果您有一些自定义对象的流,则始终可以添加.map(Object::toString)步骤以应用该toString()方法.

  • @knub,它不是迭代器,它是`iterator()`方法的方法引用(我不调用`iterator()`方法,而是创建方法引用).方法引用的使用非常正常,可以转换为功能接口类型. (3认同)