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) потребляют больше памяти и не дружат с бесконечными стримами.