具有迭代函数的kotlin无限序列
我很困惑如何在kotlin中创建一个无限序列用于懒惰评估。
在java中:
IntStream.iterate(0, i -> i + 2) .limit(100) .forEach(System.out::println);
但是序列似乎比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. */
但是我不知道迭代器函数是什么意思或者怎么做的。
Sequence { iterator(arrayOf<Int>()) } .forEach { print(it) }
我有这个编译,但显然不打印任何东西。 我不认为我的迭代器功能是有道理的。 它需要一个不带参数的函数,并返回一个迭代器,它完全不像Java .iterate函数。 迭代器碰巧有一个构造函数接受一个数组,如果我有一个数据集在一个数组中工作,但是我不知道。 我想要以无限的顺序进行工作。
没有.limit,所以我以前试过添加一个.reduce,但是.reduce的参数更加混乱。 我认为应该有一个.toList,但我知道这是行不通的,所以我没有尝试。
如果有人会告诉我如何在lotlin中实现上面的java代码,这将有很大的帮助。
你可以使用generateSequence
工厂方法:
generateSequence(0) { it + 2 }.forEach { println(it) }
或者对于有限的情况:
generateSequence(0) { it + 2 }.take(100).forEach { println(it) }