这是我的以下代码
val idNumber: String = "1342342"
var randomNumber = 0
for (number in idNumber) {
if (randomNumber < 20) {
// Do something
randomNumber++
}
}
这里有一个for循环,它通过idNumber迭代,同时我还要检查 randomNumber是否小于20 。
在Java中,我可以这样写
for (int i = 0 ; i < idNumber.length() && randomNumber < 20 ; i++) {
}
在Kotlin中我该怎么做?
我针对这个问题经历了Stackoverflow,发现了这个solution,它解释了使用一种更实用的方法。请为我上面提到的问题建议一个好的解决方案。
编辑1:我知道while循环可以用来做逻辑和,但是我想知道解决这个问题的功能方法是什么。
编辑2:添加了答案,但仍然希望收到可以更好地了解此问题的人的来信
答案 0 :(得分:2)
在这种情况下,randomNumber
似乎实际上只是一个计数器。在这种情况下,您可以执行此操作而不必使用randomNumber
来保持take()
的状态:
idNumber.take(20).forEach { number ->
...
}
这是对Char
字符串中的每个idNumber
进行迭代,但最多只能迭代20个。如果要将这些东西转换成其他东西,则可能要考虑使用map
而不是forEach
,后者只会产生副作用,不会返回任何结果。
答案 1 :(得分:0)
解决方案很简单
idNumber.takeWhile { randomNumber < 20 }.forEach { number ->
}
正如 @ pixix4 在评论中指出的那样,以上解决方案不适用于非序列,因此对randomNumber的任何更改都不会反映到takeWhile块中,因为执行了takeWhile块首先,然后执行forEach块。
添加asSequence()
可解决我认为的问题。 @Todd提供的解决方案正是我的理想之选。