具有迭代器功能的Kotlin无限序列

Gra*_*mes 6 kotlin

我很困惑如何在Kotlin中创建一个无限序列来用于懒惰评估.

在Java中:

IntStream.iterate(0, i -> i + 2)
     .limit(100)
     .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

但是序列似乎比Java流更令人困惑.它的序列构造函数令人困惑,因为它说:

/**
 * Given an [iterator] function constructs a [Sequence] that returns values through the [Iterator]
 * provided by that function.
 * The values are evaluated lazily, and the sequence is potentially infinite.
 */
Run Code Online (Sandbox Code Playgroud)

但是我不知道迭代器函数意味着什么或如何制作一个.

Sequence { iterator(arrayOf<Int>()) }
        .forEach { print(it) }
Run Code Online (Sandbox Code Playgroud)

我有这个编译,但显然不打印任何东西.我认为我的迭代器功能没有任何意义.它需要一个不带参数的函数并返回一个迭代器,它与Java .iterate函数完全不同.Iterator碰巧有一个构造函数,它接受一个数组,如果我有一个数据集可以在一个数组中工作,但我没有.我想要一个无限的序列.

没有.limit,所以我以前尝试添加一个,.reduce但争论.reduce更令人困惑.我认为应该有一个,.toList但我知道它不起作用,所以我没有尝试.

如果有人会告诉我如何在Kotlin中实现上述Java代码,那将会有很大帮助.

And*_*dEx 19

您可以使用generateSequence工厂方法:

generateSequence(0) { it + 2 }.forEach { println(it) }
Run Code Online (Sandbox Code Playgroud)

或者对于有限的情况:

generateSequence(0) { it + 2 }.take(100).forEach { println(it) }
Run Code Online (Sandbox Code Playgroud)