如何验证Kotlin列表无空元素并转换为非空列表?
Kotlin:安全转换含可空元素的List<Int?>为List
需求:检查List<Int?>中是否存在空值,若列表无空值则转换为List<Int>,否则返回emptyList()。
初始实现
你最初的写法虽能实现需求,但代码繁琐且依赖强制类型转换,不够地道:
var noNullElements: List<Int> = emptyList() if (listWithPossibleNullElements.all { it != null }) { noNullElements = listWithPossibleNullElements as List<Int> } // 使用noNullElements列表进行操作
更简洁优雅的优化方案
借助Kotlin标准库方法,可以写出符合语言风格的实现:
fun getSafeList(list: List<Int?>): List<Int> = if (null in list) emptyList() else list.requireNoNulls()
方案说明
null in list是判断列表是否含空值的直观写法,比all { it != null }更简洁易读requireNoNulls()是标准库提供的集合方法,确认列表无空值时会安全将List<Int?>转为List<Int>;由于我们已提前排除空值存在的情况,不会触发该方法的非空校验异常- 采用表达式函数体写法,让代码更紧凑,贴合Kotlin的惯用风格
如果不需要单独封装函数,也可以直接在调用处内联使用:
val safeList = if (null in listWithPossibleNullElements) emptyList() else listWithPossibleNullElements.requireNoNulls()
内容的提问来源于stack exchange,提问作者seekingStillness
相关产品推荐
相关产品推荐

