SonarLint: заменить эту лямбду ссылкой на метод - PullRequest
0 голосов
/ 06 июля 2018

У меня есть коллекция, которая содержит список ошибок. Я хотел сгруппировать их по ключу (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: замените эту лямбду ссылкой на метод и Runable Interface: замените эту лямбду ссылкой на метод. (sonar.java.source не установлен. Предполагается, что 8 или больше.)

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

Исходя из этого вопроса: Замените эту лямбду ссылкой на метод 'Objects :: nonNull'

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

Оба выдают ошибку:

Целевым типом этого выражения должен быть функциональный интерфейс

Есть ли способ, как я могу решить эту проблему SonarLint?

1 Ответ

0 голосов
/ 06 июля 2018

Вам необходимо использовать имя класса объекта, на который нацелен поток. Пример:

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

так в вашем случае:

FilterError::getUserId
...