在空值Int上使用compareTo吗?

时间:2019-01-10 18:47:31

标签: android kotlin compareto

我想知道检查可空列表是否大于0的最佳方法。

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

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

这在检查是否大于0时导致错误。IDE告诉我使用另一个带有安全调用的compareTo,但这会导致我遇到相同的情况。我可以通过为size创建一个值来解决此问题,但这似乎是一种奇怪的解决方法,我想知道是否缺少一种更简单的方法。

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

2 个答案:

答案 0 :(得分:4)

我在您的代码中看到两个问题。首先是您使用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

答案 1 :(得分:1)

要与Kotlin <1.3兼容,可以使用

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

仅当列表为非true(且不为空)时,对null(不等于null)的显式检查才会进入分支。