Кэшируют ли Kotlin Sequences промежуточные результаты?

При работе с последовательностями Kotlin с функциональными API, такими как map, flatMap, + и т. д., вычисленные промежуточные результаты кэшируются, поэтому при второй оценке нет повторного вычисления?

В противном случае замена Lists на Sequences может в некоторых ситуациях привести к экспоненциальному росту сложности, и слово «ленивый», используемое в официальные документы кажутся недостаточно точными, чтобы различить два поведения.

Другими словами, по сравнению со Scala Kotlin Sequences больше похож на Scala Streams/LazyLists (где «после вычисления значение остается вычисленным и используется повторно. Или, как вы говорите, значения кэшируются») или Views (где «все преобразования применяются повторно каждый раз, когда вам нужно извлечь из него элементы")? (цитата из В чем разница между представлением, потоком и итератором ? | Часто задаваемые вопросы | Документация по Scala)


person Shreck Ye    schedule 18.03.2020    source источник
comment
Последовательности в Kotlin похожи по структуре на потоки в Java. Вы создаете последовательность операций для выполнения, а затем при терминальной операции вся последовательность оценивается для каждого элемента в источнике. Я считаю, что последовательности одноразовые, как и потоки Java.   -  person Slaw    schedule 18.03.2020


Ответы (1)


Последовательность переоценивается каждый раз, когда вы вызываете для нее терминальную функцию. Но вы можете оценить его с помощью toList(), чтобы завершить оценку один раз и использовать список для последующих операций.

person Tenfour04    schedule 18.03.2020