Kotlin Последовательности кэшируют промежуточные результаты? - PullRequest
1 голос
/ 18 марта 2020

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

Если нет, то замена List s на Sequence s может в некоторых ситуациях приводить к экспоненциальному увеличению сложности, и слово "lazy", используемое в официальных документах , кажется недостаточно точным, чтобы различать guish два поведения.

Другими словами, по сравнению с Scala, они Kotlin Sequence s больше похожи на Scala Stream s / LazyList s (где "Once" вычисляется, значение остается вычисленным и используется повторно. Или, как вы говорите, значения кэшируются. ") или View s (где" все преобразования повторно применяются каждый раз, когда вам нужно извлечь из него элементы ")? (цитируемое содержание от В чем разница между представлением, потоком и итератором? | FAQ | Scala Документация )

1 Ответ

1 голос
/ 18 марта 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...