SonarLint:将此lambda替换为方法参考

时间:2018-07-06 08:00:58

标签: java lambda sonarlint method-reference sonarlint-eclipse

我有一个包含错误列表的集合。我想通过一个键(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()));

声纳皮棉给我以下错误:

  

将此lambda替换为方法参考。 ->

我尝试过的事情:

基于以下问题:SONAR: Replace this lambda with a method referenceRunable Interface : Replace this lambda with a method reference. (sonar.java.source not set. Assuming 8 or greater.)

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

基于以下问题:Replace this lambda with method reference 'Objects::nonNull'

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

均给出错误:

  

此表达式的目标类型必须是功能接口

有什么办法可以解决SonarLint问题?

2 个答案:

答案 0 :(得分:5)

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

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

所以在您的情况下:

FilterError::getUserId

答案 1 :(得分:0)

在我之前的情况是这样-

123.0

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

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