Замена лямбда-выражения ссылкой на метод

у меня есть статический метод, который принимает параметр Stream<Double> stream. Приезжая из arraylist.stream() или Arrays.stream(array).

задача метода-вернуть сумму всех целых чисел, которые делятся на три.

return stream.filter(i -> i.intValue() % 3 == 0).mapToInt(i -> i.intValue()).sum()

этот метод работает, однако IntelliJ предлагает следующее:

эта проверка сообщает lambdas, которые могут быть заменены ссылками на метод.

Я не слишком хорошо знаком с методом ссылки, особенно методы экземпляра ссылок, использующие сценарий имен классов.

я попробовал следующее, которое дает ошибку.

stream.filter(i -> i.intValue() % 3 == 0).mapToInt(Integer::intValue).sum()

какие предложения?

1 ответов


Как вы сказали, поток параметров имеет тип Double, поэтому вы должны сделать

stream.mapToInt(Double::intValue).filter(i -> i % 3 == 0).sum()

потому что вы вызываете функцию intValue класса Double.