在for-each循环中考虑lambda表达式中的两个场景

时间:2017-12-20 19:45:02

标签: java lambda

作为练习,我决定用Java学习lambda表达式。我想重写一下我发现笨拙而且冗长的旧代码。它检查命令行参数是(1)文件路径还是(2)目录路径。在(1)场景中,它将命令行参数传递给方法。在(2)场景中,它检查在给定目录中是否有*.pdf个文件,然后(并且只有那时)传递到每个文件的路径。我的代码如下:

File file = new File(args[0]);
            if (file.exists()) {
                if (!file.isDirectory()) {
                    modifyPdf(args[0]);
                }
                else {
                    File[] files = new File(args[0]).listFiles((FileFilter) new WildcardFileFilter("*.pdf"));
                    if (files != null) {
                        for (File f : files) {
                            modifyPdf(f);
                        }
                    }
                }

}

我写了一个处理(1)场景的lambda表达式。但是,我不知道如何在一个lambda表达式中考虑(1)和(2)场景。我将代码更改为lambda表达式的尝试如下:

for (Path path1 : Files.newDirectoryStream(Paths.get(args[0]), path ->
            Files.isRegularFile(path)
                    && path.toString().endsWith(".pdf"))) {
        Class.meth(path1);
    }

1 个答案:

答案 0 :(得分:0)

试试这个:

private void run() throws Exception
{
    Path rootDir = Paths.get("data");
    PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:**.pdf");

    Files.walk(rootDir)
         .filter(matcher::matches)
         .forEach(this::modifyPdf);
}

private void modifyPdf(Path p) {
    // Some code here...
}