行走目录时声纳皮棉问题

时间:2020-01-01 10:34:03

标签: java sonarlint

我正在使用下面的代码来遍历目录并获取第一个文件。我无法解决两个声纳皮棉问题。请帮忙。

List<String> result = walk.filter(Files::isRegularFile).map(x -> x.toString()).collect(Collectors.toList());

enter image description here

2 个答案:

答案 0 :(得分:1)

请进行以下更改:

List<String> result = walk.filter(p -> p.toFile().isFile()).map(Path::toString).collect(Collectors.toList());

SonarLint还说明了建议的原因。

Lambda应替换为方法引用

enter image description here

不应使用Java 8的“ Files.exists”

enter image description here

答案 1 :(得分:1)

查看the 3725 Sonar rule

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());