Используя CompareTo для обнуляемого Int?

Мне интересно, лучший способ проверить, что обнуляемый список больше 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 ответа

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

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

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

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

    }
}

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

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

if (!list.isNullOrEmpty()) {

}

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

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

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

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

Другие вопросы по тегам