gpt4 book ai didi

java - 如何使用 Java 8 加载文件和迭代?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:06:53 27 4
gpt4 key购买 nike

我知道这是一个简单的问题。但是我可以通过谷歌搜索更多内容来找到答案,但是您的答案可以提供不同的想法。我试图了解 Java 8 中引入的新功能。作为其中的一部分,我编写了一些代码来读取目录中的文件并将它们放入 InputStream 列表中。如何使用 Java 8 简化以下代码?

File[] gred_files = gred_directory.listFiles();

List<InputStream> gredInputStreamList = new ArrayList<InputStream>();

for(File gred_file: gred_files) {
if(gred_file.isFile()) {
InputStream gredStream = new FileInputStream(gred_file);
if (gredStream != null)
{
gredInputStreamList.add(gredStream);
}
}
}

帮助将不胜感激。

最佳答案

List<InputStream> gredInputStreamList  = Arrays.stream(gred_directory.listFiles())
.filter(File::isFile)
.map(FileInputStream::new)
.collect(Collectors.toList())

我不确定 .map(FileInputStream::new) 的部分,但是,因为有一个已检查的异常。也许我们需要一个辅助方法来完成

InputStream openStream(File file) {
try {
return new FileInputStream(gred_file);
} catch (IOException e) {
return null;
}
}

你会在这里做 .map(WhateverClassThisIsIn::openStream)

甚至更好

Optional<InputStream> openStream(File file) {
try {
return Optional.of(new FileInputStream(gred_file));
} catch (IOException e) {
return Optional.empty();
}
}

List<InputStream> gredInputStreamList  = Arrays.stream(gred_directory.listFiles())
.filter(File::isFile)
.map(WhateverClassThisIsIn::openStream)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList())

避免不必要的 null 值。 (虽然,在如此紧密的循环中,这无关紧要。)

关于java - 如何使用 Java 8 加载文件和迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569856/

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