Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 科特林的懒惰名单?_Kotlin - Fatal编程技术网

Kotlin 科特林的懒惰名单?

Kotlin 科特林的懒惰名单?,kotlin,Kotlin,如何在Kotlin中以简单的方式实现懒惰列表?(例如,整数惰性列表)。 我一直在寻找官方文件,我一直在谷歌上搜索,但没有一致的结果。也许我找到的最好的教程是,但我想知道是否有一种更符合Kotlin习惯的方法来做这件事 我在Kotlin的官方博客上发现了以下内容,尽管我无法获得一个项目,例如整数[3] var i = 0 integers = iterate{i++} integers[3] // does not work integers drop 3 // works 正如您正确观察到的

如何在Kotlin中以简单的方式实现懒惰列表?(例如,整数惰性列表)。 我一直在寻找官方文件,我一直在谷歌上搜索,但没有一致的结果。也许我找到的最好的教程是,但我想知道是否有一种更符合Kotlin习惯的方法来做这件事

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

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

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

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

因此,Kotlin使用流来实现惰性,因为当涉及到惰性集合的主要用例时,流是很好的:迭代、过滤、映射和随机访问不太可能经常遇到

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


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

iterate似乎已被弃用,但由于函数streamOf(initialValue,closureForNext),我也可以获得流。至于方括号操作符,我可以将流包装成一个类,并实现一个get(index)方法。就这么简单。根据我的说法,我可以“保存”这个问题。可能与否重复。我的问题以前被问过。我使用惰性列表来处理一个高阶函数,该函数计算fibonnaci数。因此,我可以进一步使用斐波那契序列:例如,n个偶数之和。Kotlin中的流已替换为
序列
,以避免与Java8流冲突。使用
sequenceOf
引用
streamOf
,或将另一个集合转换为sequence
asSequence