SonarLint: замените эту лямбду ссылкой на метод.

У меня есть коллекция, содержащая список ошибок. Я хотел сгруппировать их по ключу (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 Lint выдает следующую ошибку:

Замените эту лямбду ссылкой на метод. ->

Что я пробовал:

Основываясь на этом вопросе: SONAR: замените эту лямбду ссылкой на метод и Runable Interface: замените этот лямбда со ссылкой на метод. (sonar.java.source не задан. Предполагается, что 8 или выше.)

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

На основе этого вопроса: Замените эту лямбду ссылкой на метод "Objects::nonNull"< /а>

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

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

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

Есть ли способ решить эту проблему с SonarLint?


person Sirence    schedule 06.07.2018    source источник
comment
Ваши ссылки на методы неверны. Должно быть groupingBy(UUID::getRetailerId) (если w равно UUID).   -  person Kayaman    schedule 06.07.2018
comment
Вы пробовали просто использовать TYPEOFw::getUserId?   -  person Ben    schedule 06.07.2018


Ответы (2)


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

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

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

FilterError::getUserId
person CTroller    schedule 06.07.2018

В моем случае раньше было так -

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

Поскольку мне нужно передать значение функции, я сделал следующее, чтобы заменить лямбду ссылкой на метод:

whitelist0.stream().filter(whitelistEntry -> !whitelistEntry.isEmpty()).map(WhitelistEntry :: of).collect(Collectors.toList()));
person rohit kumbhar    schedule 18.06.2020