Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何关闭java.util.Stream并使用终端操作_Java_Java Stream - Fatal编程技术网

如何关闭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语句中,或将其分配给变量,则不可能关闭它。高度相关(并且可能重复):(有一些很好的答案说明为什么会这样)。