Ответ 1
Как вы правильно заметили, sequenceOf
(streamOf()
в более старых версиях) - это способ получить ленивый поток чисел. В отличие от Haskell, в стандартной библиотеке Kotlin нет такой вещи, как ленивый список, и по уважительной причине: основное значение "списка" в мире Haskell и мире Java отличается. В Haskell список - это, в первую очередь, связанный список, пара голов и хвост, а основная операция - возглавить такой список, который легко реализовать лениво. В Kotlin/Java список представляет собой структуру данных со случайным доступом к ее элементам, а основная операция get(int)
, которая может быть реализована лениво, конечно, но ее производительность часто будет удивительной для пользователя.
Итак, Kotlin использует потоки для лень, потому что они хороши, когда речь идет о основных случаях использования ленивых коллекций: итерация, фильтрация, сопоставление и случайный доступ вряд ли встречаются очень часто.
Как вы, опять же, правильно наблюдаете, drop
позволяет вам обращаться к элементам по индексу, что делает последствия производительности более явными в коде.
Кстати, какой ваш вариант использования для ленивых списков?