Посмотрите документацию :
Опциональное уменьшение (аккумулятор BinaryOperator)
Выполняет сокращение элементов этого потока, используя ассоциативная функция накопления и возвращает необязательный параметр, описывающий уменьшенное значение, если оно есть.
Это означает, что reduce
принимает BinaryOperator<T>
- специфицирующую c функцию, которая принимает два параметра типа T
и производит тот же тип.
В вашем потоке может быть любое количество Coder
экземпляров, функция сокращения берет два Coder
с и возвращает второй. Это означает, что из всего потока возвращается Coder
, завернутый в Optional
, если он есть, и пустой Optional
, если поток был пустым.
Обратите внимание, что это может быть написано более эффективно:
coders.stream()
.max(Comparator.comparing(BMICalculator::calculateBMI))
.orElse(null);