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,") }