При работе с последовательностями Kotlin с функциональными API, такими как map
, flatMap
, +
и т. д., вычисленные промежуточные результаты кэшируются, поэтому при второй оценке нет повторного вычисления?
В противном случае замена List
s на Sequence
s может в некоторых ситуациях привести к экспоненциальному росту сложности, и слово «ленивый», используемое в официальные документы кажутся недостаточно точными, чтобы различить два поведения.
Другими словами, по сравнению со Scala Kotlin Sequence
s больше похож на Scala Stream
s/LazyList
s (где «после вычисления значение остается вычисленным и используется повторно. Или, как вы говорите, значения кэшируются») или View
s (где «все преобразования применяются повторно каждый раз, когда вам нужно извлечь из него элементы")? (цитата из В чем разница между представлением, потоком и итератором ? | Часто задаваемые вопросы | Документация по Scala)