如何以简单的方式在Kotlin中实现懒惰列表? (例如,整数懒惰列表)。 我一直在寻找官方文档,我一直在谷歌搜索没有一致的结果。也许我找到的最好的教程是这个:enter link description here,但我想知道是否有更多的" kotlin本地方式"要做到这一点,或者我必须自己用我刚刚给出的链接来实现它。
我在Kotlin的官方博客上发现了以下内容,但我无法获得一个项目,例如整数[3]
var i = 0
integers = iterate{i++}
integers[3] // does not work
integers drop 3 // works
答案 0 :(得分:19)
正如您所正确观察到的那样,sequenceOf
(旧版本中的streamOf()
)是获取懒惰数字流的方法。与Haskell不同,在Kotlin的标准库中没有懒惰的列表,并且有充分的理由:" list"在Haskell世界和Java世界是不同的。在Haskell中,列表主要是一个链表,一对头和尾,主要操作是这样一个列表的头部,这很容易有效地实现懒惰。在Kotlin / Java中,list是一个随机访问其元素的数据结构,主要操作是get(int)
,当然可以懒得实现,但它的性能通常会让用户感到惊讶。
因此,Kotlin使用流来进行懒惰,因为在涉及惰性集合的主要用例时它们很好:迭代,过滤,映射和随机访问不太可能经常遇到。
正如您再次正确地观察到的那样,drop
允许您通过索引访问元素,这使得代码中的性能影响更加明显。
BTW,懒惰列表的用例是什么?