如何关闭java.util.Stream并使用终端操作
如果我有一个如何关闭java.util.Stream并使用终端操作,java,java-stream,Java,Java Stream,如果我有一个java.util.Stream需要关闭(一旦完成),我如何关闭它(通过调用close)和调用一个终端操作,例如count或collect 例如: java.nio.file.Files.lines(FileSystems.getDefault().getPath("myfile.txt")) .collect(Collectors.toSet()); //.close(); ??? (在本例中,调用close并不重要,但假设我有一个流对象,它通过o
java.util.Stream
需要关闭(一旦完成),我如何关闭它(通过调用close
)和调用一个终端操作,例如count
或collect
例如:
java.nio.file.Files.lines(FileSystems.getDefault().getPath("myfile.txt"))
.collect(Collectors.toSet());
//.close(); ???
(在本例中,调用close并不重要,但假设我有一个流对象,它通过onClose在流上注册了一个关键的close操作)
我想您可以将流存储在临时变量中并关闭它,如下所示:
Stream<String> ss = java.nio.file.Files.lines(FileSystems.getDefault().getPath("myfile.txt"));
Set<String> lines = ss.collect(Collectors.toSet());
ss.close();
return lines;
Stream ss=java.nio.file.Files.lines(FileSystems.getDefault().getPath(“myfile.txt”);
Set line=ss.collect(Collectors.toSet());
ss.close();
回流线;
但它似乎有点笨重。以这种方式关闭流是否总是安全的?请参阅文档
如果需要及时处理文件系统资源,则应使用try-with-resources构造来确保在流操作完成后调用流的close方法
此方法必须在try with resources语句或类似的控制结构中使用,以确保流的操作完成后立即关闭流的打开文件
<>我想你可能会考虑尝试使用资源构建。尤其是当前的HashSet已经演变为“必须”。您可以只做
新的HashSet(Files.readAllLines(path.get(“myfile.txt”))
,完全放弃流。@Nathanhugh我很少将流分配给变量。根据我的第一个示例,创建、使用和丢弃流。Try with resources意味着将流分配给变量。我的问题是,无论您是否使用t-w-r,这是否是关闭流的唯一方法。@VGR文件。readAllLines
只是需要关闭流的一个示例。我的问题与任何这样的流有关。这很公平。回答您的问题:不,如果不将流或任何其他可自动关闭的流放入try-with-resources语句中,或将其分配给变量,则不可能关闭它。高度相关(并且可能重复):(有一些很好的答案说明为什么会这样)。