在kotlin的懒惰名单?

时间:2014-10-26 11:42:48

标签: kotlin

如何以简单的方式在Kotlin中实现懒惰列表? (例如,整数懒惰列表)。 我一直在寻找官方文档,我一直在谷歌搜索没有一致的结果。也许我找到的最好的教程是这个:enter link description here,但我想知道是否有更多的" kotlin本地方式"要做到这一点,或者我必须自己用我刚刚给出的链接来实现它。

我在Kotlin的官方博客上发现了以下内容,但我无法获得一个项目,例如整数[3]

var i = 0
integers = iterate{i++}

integers[3] // does not work
integers drop 3 // works

1 个答案:

答案 0 :(得分:19)

正如您所正确观察到的那样,sequenceOf(旧版本中的streamOf())是获取懒惰数字流的方法。与Haskell不同,在Kotlin的标准库中没有懒惰的列表,并且有充分的理由:" list"在Haskell世界和Java世界是不同的。在Haskell中,列表主要是一个链表,一对头和尾,主要操作是这样一个列表的头部,这很容易有效地实现懒惰。在Kotlin / Java中,list是一个随机访问其元素的数据结构,主要操作是get(int),当然可以懒得实现,但它的性能通常会让用户感到惊讶。

因此,Kotlin使用流来进行懒惰,因为在涉及惰性集合的主要用例时它们很好:迭代,过滤,映射和随机访问不太可能经常遇到。

正如您再次正确地观察到的那样,drop允许您通过索引访问元素,这使得代码中的性能影响更加明显。

BTW,懒惰列表的用例是什么?