我正在使用下面的代码来遍历目录并获取第一个文件。我无法解决两个声纳皮棉问题。请帮忙。
List<String> result = walk.filter(Files::isRegularFile).map(x -> x.toString()).collect(Collectors.toList());
答案 0 :(得分:1)
请进行以下更改:
List<String> result = walk.filter(p -> p.toFile().isFile()).map(Path::toString).collect(Collectors.toList());
SonarLint
还说明了建议的原因。
Lambda应替换为方法引用
不应使用Java 8的“ Files.exists”
答案 1 :(得分:1)
Files.exists方法在JDK 8中的性能明显较差,并且 当检查文件时,会大大降低应用程序的速度 实际上不存在。
Files.notExists,Files.isDirectory和 Files.isRegularFile。
请注意,当项目的 sonar.java.source不是8。
您的项目很可能依赖JDK / JRE8。
如果您深入研究the OpenJDK issues,可能会发现在Linux上该问题已部分解决,但在Windows上未解决。
关于第二期:
map(x -> x.toString())
只需将其替换为方法参考:
map(Path::toString)
所以最终可以与Sonar兼容,它给出了:
//FIXME use Files::isRegularFile when update with Java>8
List<String> result = walk.filter(p -> p.toFile().exists())
.map(Path::toString)
.collect(Collectors.toList());