Kotlin中如何使用小于(<)或大于(>)运算符?需布尔返回值
解决compareTo返回Int?转布尔值的问题
嘿,我完全懂你的烦恼!compareTo(other: Int?)返回Int?确实没法直接拿来当布尔变量用,不过咱们可以根据你实际需要的判断逻辑,把它转换成布尔类型,下面给你几种常见场景的解决方案:
1. 判断两个值是否相等
如果你的需求是判断两个可空Int是否相等,咱们可以直接对比compareTo的结果是否为0。不过要注意如果你的compareTo确实返回Int?(比如自定义的实现),得处理返回null的情况:
// 假设num和otherNum都是Int?类型 val compareResult = num.compareTo(otherNum) // 处理compareResult为null的情况,这里默认视为不相等 val isEqual = compareResult?.let { it == 0 } ?: false
如果是Kotlin标准库的Int?.compareTo,它其实返回的是Int(不是Int?),规则是null小于任何非null值,两个null相等,这时候可以简化成:
val isEqual = num.compareTo(otherNum) == 0
2. 判断当前值大于另一个值
要是你需要判断num是否大于otherNum,可以对比compareTo的结果是否大于0,同样处理null场景:
// 标准库版本(返回Int) val isGreater = num.compareTo(otherNum) > 0 // 自定义返回Int?的版本 val isGreater = compareResult?.let { it > 0 } ?: false // 如果你想自定义null的处理逻辑,比如null视为小于任何非null值: val isGreater = when { num == null -> false otherNum == null -> true else -> num.compareTo(otherNum) > 0 }
3. 判断当前值小于另一个值
逻辑和大于的情况类似:
// 标准库版本 val isLess = num.compareTo(otherNum) < 0 // 自定义返回Int?的版本 val isLess = compareResult?.let { it < 0 } ?: false // 自定义null处理逻辑 val isLess = when { num == null -> true otherNum == null -> false else -> num.compareTo(otherNum) < 0 }
核心思路就是:根据你需要的布尔判断逻辑(相等、大于、小于),把compareTo的结果和对应的数值(0、>0、<0)做比较,同时根据你的业务需求处理null的边界情况就好啦!
内容的提问来源于stack exchange,提问作者noobEinstien
相关产品推荐
相关产品推荐

