我一直在尝试将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本地库。
答案 0 :(得分:7)
您可以使用generateSequence
函数创建无限序列,然后使用takeWhile
将其限制为特定值,然后使用forEach
代替for-in
构造处理每次迭代:
generateSequence(1) { it + it }.takeWhile { it < 100 }.forEach { print("$it,") }