当前位置: 首页 > 知识库问答 >
问题:

Sonar:用方法引用替换此lambda

林俊英
2023-03-14
public class MyClass {

    private List<SomeValue> createSomeValues(List<Anything> anyList) {
        return anyList //
               .stream() //
               .map(anything -> createSomeValue(anything)) //
               .collect(Collectors.toList());
   }

    private SomeValue createSomeValue(Anything anything) {
        StatusId statusId = statusId.fromId(anything.getStatus().getStatusId());
        return new SomeValue(anything.getExternId(), statusId);
    }

}
.map(MyClass::createSomeValue) //

索纳尔曲贝的解释是:

方法/构造函数引用比使用lambdas更紧凑、更易读,因此是首选。

共有1个答案

蒲曦
2023-03-14

是的,您可以使用this::createSomeValue:

private List<SomeValue> createSomeValues(List<Anything> anyList) {
    return anyList //
            .stream() //
            .map(this::createSomeValue) //
            .collect(Collectors.toList());
}

这种方法引用称为“对特定对象的实例方法的引用”。在本例中,您引用的是实例this的方法createSomeValue

使用lambda表达式是否“更好”是个见仁见智的问题。但是,您可以参考Brian Goetz写的这个答案,它解释了为什么首先在语言中添加方法引用。

 类似资料:
  • 当我在sonar中检查时,结果是: 它实际上指的是: 我的代码如下所示: 我试图改变它,但我得到了一个错误。有人知道如何改变它吗?

  • 我有一个包含错误列表的集合。我想通过一个键(UUID UserId)对它们进行分组。为此,我从以下答案中复制了代码:https://stackoverflow.com/a/30202075/4045364 Sonar Lint告诉我以下错误: 用方法引用替换此lambda<代码>- 我所尝试的: 基于这些问题:SONAR:用方法引用替换此lambda,可运行接口:用方法引用替换此lambda。(未

  • 我编写了代码,从包含日期变量的对象列表中查找最新日期。 <代码>列表。流()。地图(段- 但我发现声纳问题 将此lambda替换为方法引用“Objects::nonNull”。 我无法弄清楚的是,我可以在哪里使用声纳lint问题所述的方法参考。

  • 我通过方法参考获得了关于用lambda替换的声纳信息。但我必须调用字符串上的方法引用???

  • 我想知道这两段代码有什么区别: 第二行编译得很好,但我的 Ecplipse IDE 抱怨“声纳:用方法引用替换这个 lambda”。 如何选择要使用的适当代码?这些都有具体的用例吗?

  • 对于下面的代码,我得到了一个警告,正如我在标题中提到的。谁能告诉我怎么转换这个吗。 在上面的代码中,我有一个对象列表,我想使用lambda表达式从中提取所有主键。但我遇到了类似于“用方法引用替换此lambda。(sonar.java.source未设置。假设为8或更大)。”