Как написать несколько условий в Kotlin для цикла - PullRequest
0 голосов
/ 12 января 2019

Это следующий код, который у меня есть

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++) {

}

Как мне сделать то же самое в Котлине?

Я прошел Stackoverflow для этой проблемы и нашел это решение , которое объясняет использование более функционального подхода . Пожалуйста, предложите мне хорошее решение проблемы, о которой я говорил выше.

Редактировать 1: Я понимаю, что цикл while может использоваться для выполнения логического и, но я хотел бы знать, каков функциональный способ решения этого .

Редактировать 2: Добавлен ответ, но все равно хотелось бы услышать от кого-то, кто может дать лучшее понимание этой проблемы

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Кажется, что в этом случае randomNumber на самом деле просто счетчик. Если это так, вы можете сделать это без необходимости поддерживать состояние randomNumber с помощью take():

idNumber.take(20).forEach { number ->
    ...
}

Для этого необходимо выполнить итерацию по каждому Char в строке idNumber, но не более 20 из них. Если вы превращаете их во что-то другое, вы можете рассмотреть map вместо forEach, который имеет только побочный эффект и ничего не возвращает.

0 голосов
/ 12 января 2019

Решение простое

idNumber.takeWhile { randomNumber < 20 }.forEach { number ->

}

Как указывалось в комментарии @ pixix4 , вышеупомянутое решение не работает для непоследовательностей, и поэтому любое изменение в randomNumber не будет отражено в блоке takeWhile, так как блок takeWhile выполняется первым и после этого выполняется блок forEach.

Добавление asSequence() исправляет проблему, которую я считаю. В идеале @Todd - это то, что я ищу в идеале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...