首页 文章

在kotlin的懒惰名单?

提问于
浏览
16

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

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

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

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

1 回答

  • 19

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

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

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

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

相关问题