S-K*_*-K' 5 java java-8 java-stream
我有以下递归方法,只是将给定文件夹中的所有子项添加到列表中:
private List<TemplateFile> readTemplateFiles(String nextTemplateDir, String rootTemplateDir) throws FileNotFoundException {
List<TemplateFile> templateFiles = new ArrayList<>();
for (File file : new File(nextTemplateDir).listFiles()) {
if (!file.isDirectory() && !file.getName().startsWith(".")) {
templateFiles.add(TemplateFile.create(file, rootTemplateDir));
} else if (file.isDirectory()) {
templateFiles.addAll(readTemplateFiles(file.getAbsolutePath(), rootTemplateDir));
}
}
return templateFiles;
}
Run Code Online (Sandbox Code Playgroud)
我怎么能使用新的Java 8 Stream API重构这个方法?
您可以使用Files.walk(start, options...)递归遍历文件树.此方法返回Stream<Path>包含Path从给定根开始的所有内容.
通过遍历以给定起始文件为根的文件树来返回
Stream懒惰填充的内容Path.遍历深度优先的文件树,流中的元素Path是通过解析相对路径获得的对象start.
private List<TemplateFile> readTemplateFiles(String nextTemplateDir, String rootTemplateDir) throws FileNotFoundException {
return Files.walk(Paths.get(nextTemplateDir))
.filter(path -> !path.getFileName().startsWith("."))
.map(path -> TemplateFile.create(path.toFile(), rootTemplateDir))
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
在这些选项中,有FOLLOW_LINKS符号链接.
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |