我有以下递归方法,只是将给定文件夹中的所有子项添加到列表中:
private ListreadTemplateFiles(String nextTemplateDir, String rootTemplateDir) throws FileNotFoundException { List 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; }
我怎么能使用新的Java 8 Stream API重构这个方法?
您可以使用Files.walk(start, options...)
递归遍历文件树.此方法返回Stream
包含Path
从给定根开始的所有内容.
通过遍历以给定起始文件为根的文件树来返回
Stream
懒惰填充的内容Path
.遍历深度优先的文件树,流中的元素Path
是通过解析相对路径获得的对象start
.
private ListreadTemplateFiles(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()); }
在这些选项中,有FOLLOW_LINKS
符号链接.