gpt4 book ai didi

java - 如何简洁地将流收集到 map ?

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

给定目录名称列表,我想生成目录中所有文件与其内容的映射。

对于更明确的实现有什么建议吗?

    Map<File, String> map = new HashMap<>();

Arrays.stream(filenames)
.map(s -> FileUtils.listFiles(new File(rootdir, s), new RegexFileFilter(".*"), DirectoryFileFilter.DIRECTORY))
.flatMap(Collection::stream)
.forEach(f -> {
try {
map.put(f, FileUtils.readFileToString(f));
}
catch (IOException e) {
e.printStackTrace();
}
});

return map;

`

最佳答案

你应该使用 Collectors.toMap :

Map<File, String> map = Arrays.stream(filenames)
.map(s -> FileUtils.listFiles(new File(rootdir, s), new RegexFileFilter(".*"), DirectoryFileFilter.DIRECTORY))
.flatMap(Collection::stream)
.collect(Collectors.toMap(
Function.identity(),
f-> {
try { return FileUtils.readFileToString(f); }
catch (IOException ioe) { return null; }
}
));

它的第一个参数是键映射函数。未修改的文件应该用作 key ,因此我们可以使用标识功能。
它的第二个参数是值映射函数,我们将 File 映射到它们的内容。

请注意,我的值映射函数将生成 null 值,并且在无法读取文件内容时不会输出任何错误。考虑使用其他答案之一,除非您确信这样的 IOException 永远不会发生。

关于java - 如何简洁地将流收集到 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48952487/

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