作为练习,我决定用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);
}
答案 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...
}