如果我有一个java.util.Stream需要关闭的(一旦完成),我如何才能既关闭它(通过调用close)又调用一个终端操作,如countor collect?
例如:
java.nio.file.Files.lines(FileSystems.getDefault().getPath("myfile.txt"))
.collect(Collectors.toSet());
//.close(); ???
Run Code Online (Sandbox Code Playgroud)
(在此示例中,调用close并不重要,但可以说我有一个Stream对象,该对象通过onClose在流中注册了关键的close操作)。
我猜您可以将流存储在temp var中并关闭它,如下所示:
Stream<String> ss = java.nio.file.Files.lines(FileSystems.getDefault().getPath("myfile.txt"));
Set<String> lines = ss.collect(Collectors.toSet());
ss.close();
return lines;
Run Code Online (Sandbox Code Playgroud)
但似乎有点笨拙。以这种方式关闭流是否总是安全的?