gpt4 book ai didi

java - 在 Stream API 中使用 AutoClosable 接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:13 26 4
gpt4 key购买 nike

<分区>

今天我尝试重构这段代码,它从目录中的文件中读取 id,

Set<Long> ids = new HashSet<>();
for (String fileName : fileSystem.list("my-directory")) {
InputStream stream = fileSystem.openInputStream(fileName);
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
String line;
while ((line = br.readLine()) != null) {
ids.add(Long.valueOf(line.trim()));
}
br.close();
}

使用流接口(interface)

Set<Long> ids = fileSystem.list("my-directory").stream()
.map(fileName -> fileSystem::openInputStream)
.map(is -> new BufferedReader(new InputStreamReader(is)))
.flatMap(BufferedReader::lines)
.map(String::trim)
.map(Long::valueOf)
.collect(Collectors.toSet());

然后我发现 IO 流不会被关闭,而且我没有看到关闭它们的简单方法,因为它们是在管道内部创建的。

有什么想法吗?

upd:例子中的文件系统是HDFS,不能使用Files#lines等类似的方法。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com