РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
485 of 1163 menu

Метод reduce

Метод reduce выполняет свёртку элементов потока в один результат. Он последовательно применяет переданную функцию к элементам потока, накапливая промежуточное значение. Метод имеет три формы перегрузки. В первой форме параметром выступает функция типа BinaryOperator, которая принимает два значения и возвращает одно. Во второй форме первым параметром передаётся начальное значение (identity), а вторым - функция BinaryOperator. В третьей форме первым параметром передаётся начальное значение, вторым - функция типа BiFunction, а третьим - функция типа BinaryOperator для объединения промежуточных результатов при параллельной обработке.

Синтаксис

stream.reduce(BinaryOperator<T> accumulator) stream.reduce(T identity, BinaryOperator<T> accumulator) stream.reduce(U identity, BiFunction<U,? super T,U> accumulator, BinaryOperator<U> combiner)

Пример

Давайте найдём сумму всех чисел потока, используя форму метода без начального значения:

import java.util.List; import java.util.Optional; public class Main { public static void main(String[] args) { List<Integer> list = List.of(1, 2, 3, 4, 5); Optional<Integer> res = list.stream() .reduce((a, b) -> a + b); System.out.println(res.get()); } }

Результат выполнения кода:

15

Пример

Давайте найдём сумму чисел, передав начальное значение 10 в качестве первого параметра:

import java.util.List; public class Main { public static void main(String[] args) { List<Integer> list = List.of(1, 2, 3, 4, 5); Integer res = list.stream() .reduce(10, (a, b) -> a + b); System.out.println(res); } }

Результат выполнения кода:

25

Пример

Давайте найдём максимальное число в потоке, используя метод reduce без начального значения:

import java.util.List; import java.util.Optional; public class Main { public static void main(String[] args) { List<Integer> list = List.of(3, 1, 5, 2, 4); Optional<Integer> res = list.stream() .reduce((a, b) -> a > b ? a : b); System.out.println(res.get()); } }

Результат выполнения кода:

5

Пример

Давайте объединим все строки потока в одну, используя начальное значение в виде пустой строки:

import java.util.List; public class Main { public static void main(String[] args) { List<String> list = List.of("a", "b", "c", "d", "e"); String res = list.stream() .reduce("", (a, b) -> a + b); System.out.println(res); } }

Результат выполнения кода:

"abcde"

Пример

Давайте подсчитаем количество элементов потока, используя метод reduce с начальным значением:

import java.util.List; public class Main { public static void main(String[] args) { List<Integer> list = List.of(1, 2, 3, 4, 5); Integer res = list.stream() .reduce(0, (count, elem) -> count + 1); System.out.println(res); } }

Результат выполнения кода:

5

Смотрите также

  • метод collect,
    который собирает элементы потока в коллекцию
  • метод count,
    который возвращает количество элементов потока
  • метод map,
    который преобразует каждый элемент потока
  • метод filter,
    который фильтрует элементы потока по условию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить