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

Sonarint:用方法引用替换此lambda

章侯林
2023-03-14

我有一个包含错误列表的集合。我想通过一个键(UUID UserId)对它们进行分组。为此,我从以下答案中复制了代码:https://stackoverflow.com/a/30202075/4045364

Collection<FilterError> filterErrors = new ArrayList<FilterError>();

// ... some filterErrors get added to the collection ...

return filterErrors.stream().collect(Collectors.groupingBy(w -> w.getUserId()));

Sonar Lint告诉我以下错误:

用方法引用替换此lambda<代码>-

我所尝试的:

基于这些问题:SONAR:用方法引用替换此lambda,可运行接口:用方法引用替换此lambda。(未设置sonar.java.source。假设为8或更大。)

filterErrors.stream().collect(Collectors.groupingBy(this::getUserId()));

基于这个问题:将此lambda替换为方法引用“对象::nonNull”

filterErrors.stream().collect(Collectors.groupingBy(UUID::getUserId()));

两者都给出了错误:

此表达式的目标类型必须是函数接口

有没有办法解决声纳问题?

共有2个答案

潘自强
2023-03-14

我之前的情况是这样的-

whitelist0.stream().filter(whitelistEntry -> !whitelistEntry.isEmpty()).map(s -> WhitelistEntry.of(s)).collect(Collectors.toList()));

由于我需要向函数传递一个值,所以我执行了以下操作,用方法引用替换lambda-

whitelist0.stream().filter(whitelistEntry -> !whitelistEntry.isEmpty()).map(WhitelistEntry :: of).collect(Collectors.toList()));
袁单鹗
2023-03-14

您需要使用流所针对的对象的类名。例子:

List<String> list = ...;
list.stream().collect(Collectors.groupingBy(String::toUpperCase));

因此,在您的情况下:

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

  • 索纳尔曲贝的解释是: 方法/构造函数引用比使用lambdas更紧凑、更易读,因此是首选。

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

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

  • 在此代码中,我有以下警告: 用方法引用替换此lambda。 我不知道如何解决这个错误,因为它在forEach中,在map中,我可以使用,但在这里,我不能。 有什么想法吗?

  • 问题内容: 假设我的格式如下: 我想将小数点替换为空白,使其看起来像这样: 我该怎么做呢?我以为可以解决问题,但是当我尝试这样时: 我收到了一个错误消息,因为它可能不是字符。那是有道理的,那么我还能怎么完成我想要的? 问题答案: 如果您只是将单引号换成双引号,那么这将起作用,因为空字符串是合法值,而不是“空字符”,并且有重载。请记住,这是的超类型。