Stream.reduce()
Сворачивает все элементы потока в одно значение.
Доступно с: Java 8
Синтаксис
T reduce(T identity, BinaryOperator<T> accumulator)
Optional<T> reduce(BinaryOperator<T> accumulator)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| identity | T | Начальное значение (для суммы — 0, для произведения — 1). |
| accumulator | BinaryOperator<T> | Объединяет накопленный результат со следующим элементом. |
Возвращаемое значение
T | Optional<T>Итоговое значение; без начального значения — `Optional`.
Примеры
Сумма и произведение:
void main() {
List<Integer> nums = List.of(1, 2, 3, 4);
IO.println(nums.stream().reduce(0, Integer::sum));
IO.println(nums.stream().reduce(1, (a, b) -> a * b));
}Результат:
10
24Без начального значения результат — Optional:
void main() {
Optional<String> longest = Stream.of("pear", "banana", "fig")
.reduce((a, b) -> a.length() >= b.length() ? a : b);
IO.println(longest.orElse("none"));
IO.println(Stream.<String>empty().reduce((a, b) -> a + b).isPresent());
}Результат:
banana
falseПримечания
Для частых случаев есть готовые методы: mapToInt(...).sum(), count(), max(), Collectors.joining() — они понятнее. Начальное значение должно быть нейтральным: 0 для сложения, 1 для умножения, "" для склейки строк.
См. также
- IntStream.sum() — Складывает все числа потока.
- Stream.count() — Считает элементы потока.
- BinaryOperator — Функция двух аргументов, где аргументы и результат одного типа.
В учебнике
- Операции над потоками — Основные операции Stream API — filter, map, sorted, distinct, limit, skip, count, reduce, anyMatch, findFirst и числовые потоки.