Ответ
reduce — это терминальная операция в Java Stream API, которая выполняет свёртку (агрегацию) элементов потока в одно значение, последовательно применяя функцию-аккумулятор.
Основные формы:
-
С начальным значением (identity):
T reduce(T identity, BinaryOperator<T> accumulator)identity— начальное значение и результат для пустого потока.accumulator— функция, объединяющая текущий результат и следующий элемент.List<Integer> numbers = List.of(1, 2, 3, 4); int sum = numbers.stream() .reduce(0, (a, b) -> a + b); // Результат: 10
-
Без начального значения:
Optional<T> reduce(BinaryOperator<T> accumulator)- Возвращает
Optional, так как для пустого потока результата нет.Optional<Integer> product = numbers.stream() .reduce((a, b) -> a * b); // Optional[24]
- Возвращает
Ключевые моменты:
- Использование: сумма, произведение, поиск максимума/минимума, конкатенация строк.
- Порядок: В параллельных потоках
accumulatorдолжен быть ассоциативным, аidentity— нейтральным элементом (например,0для сложения,1для умножения). - Альтернативы: Для часто используемых операций (
sum,max,min) существуют специализированные методы.