Метод reducing
Метод reducing класса Collectors выполняет
сведение элементов потока в один результат. Он последовательно
применяет бинарную операцию к элементам потока, начиная
с начального значения. Первым параметром метод принимает
начальное значение (identity), вторым - функцию-аккумулятор,
которая принимает промежуточный результат и текущий элемент
и возвращает новое значение. Существует перегрузка без
начального значения, возвращающая Optional, а также
перегрузка с функцией-маппером, преобразующей элементы
перед сведением.
Синтаксис
Collectors.reducing(identity, accumulator)
Collectors.reducing(identity, mapper, accumulator)
Collectors.reducing(accumulator)
Пример
Давайте найдём сумму всех чисел списка, используя
начальное значение 0 и операцию сложения:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
int res = list.stream()
.collect(Collectors.reducing(0, (a, b) -> a + b));
System.out.println(res);
}
}
Результат выполнения кода:
15
Пример
Давайте найдём произведение всех чисел списка:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
int res = list.stream()
.collect(Collectors.reducing(1, (a, b) -> a * b));
System.out.println(res);
}
}
Результат выполнения кода:
120
Пример
Давайте найдём сумму длин всех строк списка, используя функцию-маппер:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("abcde", "12345", "abc", "12");
int res = list.stream()
.collect(Collectors.reducing(0, String::length, (a, b) -> a + b));
System.out.println(res);
}
}
Результат выполнения кода:
15
Пример
Давайте найдём максимальное число списка, используя перегрузку без начального значения:
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
Optional<Integer> res = list.stream()
.collect(Collectors.reducing((a, b) -> a > b ? a : b));
System.out.println(res);
}
}
Результат выполнения кода:
Optional[5]
Смотрите также
-
класс
Collectors,
который содержит методы для коллекционирования -
метод
summarizingInt,
который собирает статистику по числам -
метод
counting,
который подсчитывает количество элементов -
метод
mapping,
который преобразует элементы перед сбором