我一直在尝试将Java表达式转换为Kotlin,它产生了这个序列:
1,2,4,8,16,32,64
这是Java代码:
for(int i = 1; i < 100; i = i + i) {
System.out.printf("%d,", i);
}
Run Code Online (Sandbox Code Playgroud)
我发现将其翻译成Kotlin的唯一方法是:
var i = 1
while (i < 100) {
print("$i,")
i += i
}
Run Code Online (Sandbox Code Playgroud)
我试图使用步骤表达式,但这似乎不起作用.有没有办法在Kotlin中更优雅地表达这种类型的序列?
我知道你可以使用Kotlin + Java 9获得这样的代码:
Stream.iterate(1, { it <= 100 }) { it!! + it }.forEach { print("$it,") }
Run Code Online (Sandbox Code Playgroud)
但这依赖于Java库,我更喜欢Kotlin本地库.
您可以使用该generateSequence函数创建无限序列,然后使用takeWhile它将其限制为特定值,然后使用forEach而不是for-in构造来处理每个迭代:
generateSequence(1) { it + it }.takeWhile { it < 100 }.forEach { print("$it,") }
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |