SonarLint:用方法引用替换此 lambda
SonarLint: Replace this lambda with a method reference
我有一个包含错误列表的集合。我想通过一个键(UUID UserId)对它们进行分组。为此,我从这个答案中复制了代码:
Collection<FilterError> filterErrors = new ArrayList<FilterError>();
// ... some filterErrors get added to the collection ...
return filterErrors.stream().collect(Collectors.groupingBy(w -> w.getUserId()));
Sonar Lint 给我以下错误:
Replace this lambda with a method reference. ->
我试过的:
基于这些问题: and Runable Interface : Replace this lambda with a method reference. (sonar.java.source not set. Assuming 8 or greater.)
filterErrors.stream().collect(Collectors.groupingBy(this::getUserId()));
基于这个问题:
filterErrors.stream().collect(Collectors.groupingBy(UUID::getUserId()));
两者都报错:
The target type of this expression must be a functional interface
有什么方法可以解决这个 SonarLint 问题吗?
您需要使用流所针对的对象的 class 名称。
示例:
List<String> list = ...;
list.stream().collect(Collectors.groupingBy(String::toUpperCase));
所以在你的情况下:
FilterError::getUserId
我以前的情况是这样的 -
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()));
我有一个包含错误列表的集合。我想通过一个键(UUID UserId)对它们进行分组。为此,我从这个答案中复制了代码:
Collection<FilterError> filterErrors = new ArrayList<FilterError>();
// ... some filterErrors get added to the collection ...
return filterErrors.stream().collect(Collectors.groupingBy(w -> w.getUserId()));
Sonar Lint 给我以下错误:
Replace this lambda with a method reference.
->
我试过的:
基于这些问题:
filterErrors.stream().collect(Collectors.groupingBy(this::getUserId()));
基于这个问题:
filterErrors.stream().collect(Collectors.groupingBy(UUID::getUserId()));
两者都报错:
The target type of this expression must be a functional interface
有什么方法可以解决这个 SonarLint 问题吗?
您需要使用流所针对的对象的 class 名称。 示例:
List<String> list = ...;
list.stream().collect(Collectors.groupingBy(String::toUpperCase));
所以在你的情况下:
FilterError::getUserId
我以前的情况是这样的 -
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()));