Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Stream.reduce()

Сворачивает все элементы потока в одно значение.

Доступно с: Java 8

Синтаксис

T reduce(T identity, BinaryOperator<T> accumulator)
Optional<T> reduce(BinaryOperator<T> accumulator)

Параметры

ПараметрТипОписание
identityTНачальное значение (для суммы — 0, для произведения — 1).
accumulatorBinaryOperator<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 и числовые потоки.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.