作为练习,我决定重写我的一些代码以使用lambda表达式。该代码应检查给定的字符串是否是具有.pdf
扩展名的文件的路径,然后应显示满足此要求的所有文件。这就是我已经想出的:
Files.newDirectoryStream(Paths.get(args[0]), path -> path.toFile()
.toString()
.endsWith(".pdf"))
.forEach(System.out::println);
该代码在某一点上失败:它还显示目录。您能否告诉我以下代码为何无法编译?
Files.newDirectoryStream(Paths.get(args[0]), path -> path.toFile()
.isFile()
.toString()
.endsWith(".pdf"))
.forEach(System.out::println);
您的第二个代码无法编译,因为isFile
返回boolean
。一旦有了boolean
,文件名就消失了;即使您可以将其转换为String
,匹配其后缀".pdf"
仍将失败。
您正在测试两个单独的条件,因此您应该在两个单独的检查中对其进行测试:
Files.newDirectoryStream(Paths.get(args[0]), path ->
Files.isRegularFile(path) && path.toString().endsWith(".pdf")
).forEach(System.out::println);
请注意,path.toString().endsWith(...)
无需转换Path
为即可进行检查File
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句