Ответ
В Stream API промежуточные операции (intermediate operations) обрабатывают элементы потока и возвращают новый поток. Они "ленивые" - выполняются только при вызове терминальной операции.
Примеры промежуточных операций:
List<String> names = Arrays.asList("John", "Alice", "Bob", "Eve");
// Фильтрация
Stream<String> filtered = names.stream()
.filter(name -> name.length() > 3);
// Преобразование (map)
Stream<Integer> lengths = names.stream()
.map(String::length);
// Сортировка
Stream<String> sorted = names.stream()
.sorted();
// Уникальные элементы
Stream<String> distinct = names.stream()
.distinct();
// Пропуск первых N элементов
Stream<String> skipped = names.stream()
.skip(2);
// Ограничение количества элементов
Stream<String> limited = names.stream()
.limit(3);
Можно объединять операции в цепочки:
List<String> result = names.stream()
.filter(name -> name.length() > 3)
.map(String::toUpperCase)
.sorted()
.collect(Collectors.toList());