这段代码用于搜索特定文件:
Stream<Path> findMyFile = Files.find(Paths.get("c:\\temp\\pathtest"), Integer.MAX_VALUE,(p, a) -> p.endsWith("test.txt") && a.isRegularFile());
Stream<Path> findMyFileSecond = Files.walk(Paths.get("c:\\temp\\pathtest"),Integer.MAX_VALUE).filter(p -> p.endsWith("test.txt"));
findMyFile.forEach(System.out::println);
findMyFileSecond.forEach(System.out::println);
两种方法都包含相同的文件,并且两种方法完成时间几乎相同。JavaDoc中如下所述:
此方法按照#walk walk方法指定的方式精确地遍历文件树。与调用java.util.stream.Stream#filter Stream上的filter不同,通过{@code walk}方法返回的此方法可以通过避免冗余检索BasicFileAttributes而更加高效。
何时应该将
walk
与filter
组合使用,何时使用find
?什么被认为是最佳实践?
walk
返回的流应用过滤器,则find
比walk
更好。 - VGR