SonarLint:将此 lambda 替换为方法引用



我有一个包含错误列表的集合。我想按键(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:将此 lambda 替换为方法引用和 Rable 接口:将此 lambda 替换为方法引用。(声纳.java.源未设置。假设为 8 或更大。

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

基于此问题:将此 lambda 替换为方法引用 'Objects::nonNull'

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

两者都给出错误:

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

有没有办法解决这个SonarLint问题?

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

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

最新更新