Sequence
в Kotlin — это инструмент ленивой (lazy) обработки коллекций. Sequence
— это ленивая коллекция: элементы вычисляются по мере запроса, а не все сразу.
- это основа эффективной обработки больших списков без аллокаций,
- это альтернатива Stream API в Java, но со своими фишками,
- он тесно связан с
iterator
,yield
,lazy
, иinline
.
Как работает?
- Под капотом
Sequence
использует итератор (Iterator<T>
) - Операции
map
,filter
,take
,drop
и т.д. не создают новые списки - Они просто оборачиваются как цепочка итераторов
- Только при первом вызове
toList()
,forEach
,first()
и т.п. начинается выполнение
Зачем использовать Sequence
?
Проблема обычных коллекций | Решение через Sequence |
---|---|
map().filter().take() создают новые списки на каждый шаг | Sequence делает это лениво — один проход |
Большой объём данных → много аллокаций | Sequence минимизирует использование памяти |
Данные приходят «по частям» | generateSequence , sequence {} → как генератор |
Аналогия:
Обычные коллекции — это как список всех блюд на шведском столе, ты взял всё и потом ешь. Блюд очень много заготовлено и не факт что они будут съедены.Sequence
— это как повар, готовящий тебе еду по одному блюду, когда ты просишь и на заказ(но это дольше).