Kotlin循环与不规则的步骤

时间:2017-09-23 21:10:04

标签: java kotlin

我一直在尝试将Java表达式翻译成Kotlin,它产生了这个序列:

  

1,2,4,8,16,32,64

这是Java代码:

for(int i = 1; i < 100; i = i + i) {
    System.out.printf("%d,", i);
}

我发现将其翻译成Kotlin的唯一方法是:

var i = 1
while (i < 100) {
    print("$i,")
    i += i
}

我曾尝试使用步骤表达式,但这似乎不起作用。有没有办法在Kotlin中更优雅地表达这种类型的序列?

我知道你可以使用Kotlin + Java 9编写像这样的代码:

Stream.iterate(1, { it <= 100 }) { it!! + it }.forEach { print("$it,") }

但这依赖于Java库,我更喜欢Kotlin本地库。

1 个答案:

答案 0 :(得分:7)

您可以使用generateSequence函数创建无限序列,然后使用takeWhile将其限制为特定值,然后使用forEach代替for-in构造处理每次迭代:

generateSequence(1) { it + it }.takeWhile { it < 100 }.forEach { print("$it,") }