Gymterview
junior

Какие промежуточные методы работы со стримами вы знаете?

Промежуточные (intermediate) операции возвращают новый стрим и выполняются лениво — только при вызове терминальной операции. Их можно выстраивать в цепочки произвольной длины.

Метод Описание
filter(predicate) Фильтрация по условию
map(function) Преобразование каждого элемента
flatMap(function) Преобразование + выпрямление вложенных стримов
sorted() / sorted(comparator) Сортировка
distinct() Удаление дубликатов (по equals())
limit(n) Ограничение первыми n элементами
skip(n) Пропуск первых n элементов
peek(consumer) Побочное действие без изменения стрима (для отладки)
mapToInt() / mapToDouble() / mapToLong() Преобразование в примитивный стрим
flatMapToInt() / flatMapToDouble() / flatMapToLong() flatMap с примитивным стримом

Для числовых стримов дополнительно доступен mapToObj(), преобразующий примитивный стрим обратно в объектный, и boxed() для автобоксинга.

Промежуточные операции делятся на stateless (filter, map, flatMap, peek) и stateful (sorted, distinct, limit, skip). Stateful-операции могут потребовать буферизации всех элементов перед продолжением обработки.

На собеседовании: важно знать разделение на stateless и stateful. Stateful-операции (sorted, distinct) потребляют больше памяти и не дружат с бесконечными стримами.