在kotlin的懒惰名单?

lol*_*f64 17 kotlin

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

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

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

integers[3] // does not work
integers drop 3 // works
Run Code Online (Sandbox Code Playgroud)

And*_*lav 19

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

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

正如您再次正确观察的那样,drop您可以通过索引访问元素,这会使代码中的性能影响更加明显.

顺便说一句,懒惰列表的用例是什么?

  • Kotlin中的Streams已被`Sequence`取代,以避免与Java 8流冲突.使用`sequenceOf`引用`streamOf`或将另一个集合转换为`asSequence`序列 (11认同)