Ответ
Метод reduce() в Stream API используется для свертки элементов потока в одно итоговое значение с помощью ассоциативной функции.
Основные формы:
Optional<T> reduce(BinaryOperator<T> accumulator)T reduce(T identity, BinaryOperator<T> accumulator)U reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)
Примеры:
-
Суммирование чисел (с identity):
List<Integer> numbers = List.of(1, 2, 3, 4, 5); int sum = numbers.stream() .reduce(0, (a, b) -> a + b); // Идентичность 0 гарантирует результат int, а не Optional System.out.println(sum); // 15Или с методом-ссылкой:
int sum = numbers.stream() .reduce(0, Integer::sum); -
Поиск максимального значения (без identity):
Optional<Integer> max = numbers.stream() .reduce(Integer::max); max.ifPresent(System.out::println); // 5 -
Конкатенация строк:
List<String> words = List.of("Hello", " ", "World", "!"); String sentence = words.stream() .reduce("", String::concat); System.out.println(sentence); // "Hello World!"
Важно: Функция-аккумулятор должна быть ассоциативной, чтобы корректно работать в параллельных потоках.