Используя 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()) {
}
Для совместимости с Kotlin < 1.3 вы можете использовать
if (list?.isNotEmpty() == true) {
// ....
}
Явная проверка для true
(который не равен null
) займет ветку, только если список неnull
(и не пустой).