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 — это как повар, готовящий тебе еду по одному блюду, когда ты просишь и на заказ(но это дольше).