通过递归遍历文件系统生成路径路径流的新API是
Files.walk。
如果您真的想递归地生成流(不一定要遍历文件树,但是我将继续使用它作为示例),则使用方法引用来完成递归可能会更直接一些:
class RecursiveStream { static Stream<Path> listFiles(Path path) { if (Files.isDirectory(path)) { try { return Files.list(path).flatMap(RecursiveStream::listFiles); } catch (Exception e) { return Stream.empty(); } } else { return Stream.of(path); } } public static void main(String[] args) { listFiles(Paths.get(".")).forEach(System.out::println); }}方法引用对于将具有与功能接口相同的“形状”(参数和返回类型)的“形状”(参数和返回类型)的命名方法适配到该功能接口非常有用。通过在实例或静态变量中存储lambda并递归调用自身,这也避免了潜在的初始化循环。



