加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – lambda表达式中的Else子句

发布时间:2020-12-14 05:45:17 所属栏目:Java 来源:网络整理
导读:我使用以下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(Sta
我使用以下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    
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读