我使用以下lambda表达式迭代PDF文件.
public static void run(String arg) { Path rootDir = Paths.get(arg); PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:**.pdf"); Files.walk(rootDir) .filter(matcher::matches) .forEach(Start::modify); } private static void modify(Path p) { System.out.println(p.toString()); }
这部分.forEach(Start :: modify);从lambda表达式所在的同一个类执行static方法修改.当没有找到PDF文件时,是否有可能添加类似else子句的内容?
解决方法
您可以将过滤器操作后的结果收集到列表实例中,然后在对其进行操作之前检查大小.
List<Path> resultSet = Files.walk(rootDir) .filter(matcher::matches) .collect(Collectors.toList()); if(resultSet.size() > 0){ resultSet.forEach(Start::modify); }else { // do something else }
或者,您可以这样做:
if(Files.walk(rootDir).anyMatch(matcher::matches)) { Files.walk(rootDir) .filter(matcher::matches) .forEach(Start::modify); }else { // do something else }