У меня есть коллекция, которая содержит список ошибок. Я хотел сгруппировать их по ключу (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?
Вам необходимо использовать имя класса объекта, на который нацелен поток. Пример:
List<String> list = ...; list.stream().collect(Collectors.groupingBy(String::toUpperCase));
так в вашем случае:
FilterError::getUserId