具有迭代器函数的Kotlin无穷序列

时间:2016-03-28 02:24:41

标签: 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函数。 Iterator恰好有一个构造函数,它接受一个数组,如果我有一个数据集可以在一个数组中工作,那就没有意义了,但我不知道。我想要一个无限的序列。

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

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

1 个答案:

答案 0 :(得分:18)

您可以使用generateSequence工厂方法:

generateSequence(0) { it + 2 }.forEach { println(it) }

或有限的情况:

generateSequence(0) { it + 2 }.take(100).forEach { println(it) }