Используя CompareTo для обнуляемого Int? - PullRequest
0 голосов
/ 10 января 2019

Мне интересно, как лучше всего убедиться, что обнуляемый список больше 0.

val list: List<Any>? = listOf()

if (list?.size.compareTo(1) > 0)
{
     //do something
}

Это приводит к ошибке при проверке, если больше 0. IDE говорит мне использовать другое сравнение с безопасным вызовом, но это приводит меня к той же ситуации. Я смог обойти это, создав значение для размера, но это кажется странной работой, и мне было интересно, упускаю ли я более простой способ.

val count = list?.size ?: 0
if (count > 1)
{
     //do something
}

Ответы [ 2 ]

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

Для совместимости с Kotlin <1.3 вы можете использовать </p>

if (list?.isNotEmpty() == true) {
    // ....
}

Явная проверка для true (которая не равна null) примет ветвь, только если список не является null (и не пуст).

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

Я вижу две проблемы в вашем коде. Во-первых, вы используете compareTo() вместо прямого сравнения (например, size > 0). Другое - использование list? означает, что любые дальнейшие результаты могут быть null, но вы не справляетесь с этим.

Вот как я подхожу к этому:

val list: List<Any>? = listOf()

list?.let {
    if (it.isNotEmpty()) {

    }
}

Kotlin 1.3, кажется, предоставляет метод isNullOrEmpty(), который позволит вам написать вместо этого:

val list: List<Any>? = listOf()

if (!list.isNullOrEmpty()) {

}

https://twitter.com/kotlin/status/1050426794682306562

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