Ответ
Агрегирующая функция (или терминальная операция) в Java Stream API — это операция, которая обрабатывает все элементы потока и возвращает одно итоговое значение или побочный эффект. Эти операции завершают ("закрывают") поток.
Основные агрегирующие функции Stream API:
count()— возвращает количество элементов в потоке (long).sum(),average(),min(),max()— доступны для специализированных потоков (IntStream,LongStream,DoubleStream).reduce()— универсальная операция для свертки элементов по заданному аккумулятору.collect()— гибкая операция для преобразования потока в коллекцию или другой объект (используетCollector).
Примеры использования:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
List<Integer> numbers = Arrays.asList(5, 3, 8, 1, 9);
// count()
long count = numbers.stream().count(); // 5
// sum(), average(), min(), max() через IntStream
int sum = numbers.stream().mapToInt(i -> i).sum(); // 26
double avg = numbers.stream().mapToInt(i -> i).average().orElse(0); // 5.2
Optional<Integer> min = numbers.stream().min(Integer::compare); // Optional[1]
Optional<Integer> max = numbers.stream().max(Integer::compare); // Optional[9]
// reduce() - сворачивание элементов
Optional<Integer> product = numbers.stream().reduce((a, b) -> a * b); // 5*3*8*1*9 = 1080
Integer sumWithIdentity = numbers.stream().reduce(0, Integer::sum); // 26 (0 - начальное значение)
// collect() - агрегация в коллекцию
List<Integer> squaredList = numbers.stream()
.map(n -> n * n)
.collect(Collectors.toList()); // [25, 9, 64, 1, 81]