Метод teeing
Метод teeing класса Collectors позволяет
применить два независимых коллектора к одному потоку
и объединить их результаты с помощью функции-слияния.
В первый параметр мы передаем первый коллектор, во второй
параметр - второй коллектор, а в третий - функцию
BiFunction, которая принимает результаты обоих
коллекторов и возвращает итоговое значение.
Метод особенно полезен, когда нужно вычислить две
характеристики потока за один проход.
Синтаксис
Collectors.teeing(downstream1, downstream2, merger)
Пример
Давайте посчитаем одновременно количество элементов и их сумму в списке чисел:
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);
String res = list.stream()
.collect(Collectors.teeing(
Collectors.counting(),
Collectors.summingInt(Integer::intValue),
(count, sum) -> "count=" + count + ", sum=" + sum
));
System.out.println(res);
}
}
Результат выполнения кода:
"count=5, sum=15"
Пример
Давайте найдем минимальное и максимальное значение в списке чисел одновременно:
import java.util.List;
import java.util.stream.Collectors;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(3, 1, 4, 2, 5);
String res = list.stream()
.collect(Collectors.teeing(
Collectors.minBy(Integer::compareTo),
Collectors.maxBy(Integer::compareTo),
(min, max) -> "min=" + min.get() + ", max=" + max.get()
));
System.out.println(res);
}
}
Результат выполнения кода:
"min=1, max=5"
Смотрите также
-
класс
Collectors,
который содержит методы для коллекционирования -
метод
partitioningBy,
который разбивает поток на две группы -
метод
groupingBy,
который группирует элементы потока -
метод
reducing,
который сворачивает элементы в одно значение