Ответ
Stream API в Java (java.util.stream) — это абстракция для декларативной обработки последовательностей данных (коллекций, массивов, I/O) с возможностью цепочек операций и параллельного выполнения.
Основные концепции:
-
Источник (Source): Коллекция, массив, генератор.
List<String> list = Arrays.asList("a1", "a2", "b1"); Stream<String> streamFromList = list.stream(); -
Промежуточные операции (Intermediate): Lazy-операции, возвращающие новый Stream.
filter(Predicate<T>)— фильтрация.map(Function<T,R>)— преобразование.sorted()— сортировка.list.stream() .filter(s -> s.startsWith("a")) // Промежуточная .map(String::toUpperCase) // Промежуточная
-
Терминальные операции (Terminal): Запускают выполнение конвейера и возвращают результат (не Stream).
collect(Collector)— сбор в коллекцию.forEach(Consumer)— выполнение действия.count(),reduce()— агрегация.List<String> result = list.stream() .filter(s -> s.startsWith("a")) .collect(Collectors.toList()); // Терминальная операция
Преимущества:
- Декларативный стиль: Код описывает что сделать, а не как.
- Параллелизм: Легкое включение параллельной обработки через
.parallelStream(). - Оптимизация: Возможность обхода данных за один проход (short-circuiting, lazy evaluation).
Важно: Stream — одноразовый. После вызова терминальной операции его нельзя использовать повторно.