如何在Kotlin中为循环编写多个条件

时间:2019-01-12 12:17:40

标签: loops kotlin

这是我的以下代码

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:添加了答案,但仍然希望收到可以更好地了解此问题的人的来信

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提供的解决方案正是我的理想之选。