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本地库。

您可以使用generateSequence函数创建一个无限序列,然后使用takeWhile将其限制在特定值,然后使用forEach而不是for-in构造来处理每个迭代:

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