我对如何在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
函数。 Iterator恰好有一个构造函数,它接受一个数组,如果我有一个数据集可以在一个数组中工作,那就没有意义了,但我不知道。我想要一个无限的序列。
没有.limit
,所以我之前尝试添加.reduce
,但.reduce
的参数更令人困惑。我认为应该有一个.toList
,但我知道它不起作用所以我没有尝试过。
如果有人告诉我如何在Kotlin中实现上述Java代码,那将会有很大帮助。
答案 0 :(得分:18)
您可以使用generateSequence
工厂方法:
generateSequence(0) { it + 2 }.forEach { println(it) }
或有限的情况:
generateSequence(0) { it + 2 }.take(100).forEach { println(it) }