← Назад к вопросам
Какие знаешь промежуточные операции?
2.0 Middle🔥 241 комментариев
#Stream API и функциональное программирование
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Промежуточные операции в Stream API
Промежуточные операции (intermediate operations) возвращают новый Stream и не выполняют вычисления сразу. Выполняются только при вызове терминальной операции (collect, forEach, count).
map() - преобразование элементов
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
List<Integer> squared = numbers.stream()
.map(n -> n * n)
.collect(Collectors.toList());
// Результат: [1, 4, 9, 16]
filter() - фильтрация
List<Integer> evens = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
// Результат: [2, 4]
flatMap() - развёртывание потоков
List<List<Integer>> nested = Arrays.asList(
Arrays.asList(1, 2),
Arrays.asList(3, 4)
);
List<Integer> flat = nested.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
// Результат: [1, 2, 3, 4]
distinct() - удаление дубликатов
List<Integer> unique = Arrays.asList(1, 2, 2, 3, 3, 4).stream()
.distinct()
.collect(Collectors.toList());
// Результат: [1, 2, 3, 4]
sorted() - сортировка
List<Integer> sorted = numbers.stream()
.sorted()
.collect(Collectors.toList());
List<User> byAge = users.stream()
.sorted(Comparator.comparing(User::getAge))
.collect(Collectors.toList());
limit() и skip()
List<Integer> first3 = numbers.stream()
.limit(3)
.collect(Collectors.toList());
List<User> page = users.stream()
.skip((pageNumber - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
peek() - просмотр для отладки
List<Integer> result = numbers.stream()
.peek(n -> System.out.println("Processing: " + n))
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
Главное свойство: Lazy evaluation
Промежуточные операции не выполняются пока не вызвана терминальная операция:
Stream<Integer> stream = numbers.stream()
.filter(n -> {
System.out.println("Filtering: " + n);
return n > 2;
})
.map(n -> {
System.out.println("Mapping: " + n);
return n * 2;
});
// На этот момент ничего не печатается!
List<Integer> result = stream.collect(Collectors.toList());
// Вот здесь вычисляется всё
Цепочка операций
List<String> result = users.stream()
.filter(u -> u.getAge() >= 18)
.filter(u -> u.getRole() == Role.ADMIN)
.map(User::getName)
.sorted()
.distinct()
.collect(Collectors.toList());
Основные промежуточные операции: map, filter, flatMap, distinct, sorted, limit, skip, peek. Все они возвращают Stream и выполняются лениво (lazy evaluation) только при вызове терминальной операции. map vs flatMap - один из частых вопросов на собеседованиях.