Карта потоков с общим типом - PullRequest
0 голосов
/ 28 сентября 2019

Я хочу чистую проблему сонара после создания нового кода в java 8.

public class Argument<T> {
    ...
    public T getValue() {
        return parameterType.transform(group.getValues());
    }
    ...
}

Мой код:

 List<Argument<?>> args = expression.match(text);
 return args == null ? null : args.stream().map(arg -> arg.getValue()).collect(Collectors.toList());

Сонар говорит:

Лямбды должны быть замененысо ссылками на метод.Ссылки на методы / конструкторы являются более компактными и удобочитаемыми, чем использование лямбда-выражений, и поэтому являются предпочтительными.Точно так же нулевые проверки могут быть заменены ссылками на методы Objects :: isNull и Objects :: nonNull.

Я хочу изменить map(arg -> arg.getValue()) на map(T::getValue()), но это неправильная компиляция ().

1 Ответ

3 голосов
/ 28 сентября 2019

Лямбды должны быть заменены ссылками на методы

изменить

.map(arg -> arg.getValue())

на

.map(Argument::getValue)

Для:

Аналогично, нулевые проверки могут быть заменены ссылками на методы Objects :: isNull и Objects :: nonNull

Я раньше не использовал Sonar, но если он предпочитает использовать Objects.isNull и Objects.nonNull для нулевых проверок, тогда вам нужно сделать:

return Objects.isNull(args) ? null : args.stream()
                .map(Argument::getValue)
                .collect(Collectors.toList());
...