假设有一个集合,List或Map,我只需要取集合里面的第1个元素,普通代码实现如下:
val list = mutableListOf("一", "二", "三")
val map = mutableMapOf("一" to "1", "二" to "2")
val result01 = if (list.isNotEmpty()) list[0] else ""
val result02 = if (map.isNotEmpty()) {
var resultValue = ""
for ((key, value) in map) {
resultValue = value
break
}
resultValue
} else {
""
}
如上代码,实现了获取List或Map中第1个元素的value值,如果没有则使用空字符串,这获取List第1个元素的代码还好,但是获取Map第1个元素的代码就有点恶心了,在不知道key的情况下,获取一个元素就需要遍历,代码写的好臃肿,还好我们的Kotlin有更好的写法,如下:
val list = mutableListOf("一", "二", "三")
val map = mutableMapOf("一" to "1", "二" to "2")
val result01 = list.firstOrNull() ?: ""
val result02 = map.entries.firstOrNull()?.value ?: ""
Ok,就是这么的舒服,再也不需要判断集合中有没有元素了,代码超短的,爽!
对应的,也有获取最后一个元素的方法:lastOrNull()
在使用集合的时候,比如遍历一个集合的时候,经常会用到判断是否是遍历到最后一个元素了的操作,如下:
val list = listOf(1, 2, 3)
list.forEachIndexed { index, i ->
if (index == list.size - 1) {
println("现在是最后一个元素了")
}
}
list.size - 1表示最后一个元素的索引,这太常用了,所以Kotlin添加了扩展属性,如下:
public val <T> List<T>.lastIndex: Int
get() = this.size - 1
所以,前面的示例可以优化为:
val list = listOf(1, 2, 3)
list.forEachIndexed { index, i ->
if (index == list.lastIndex) {
println("现在是最后一个元素了")
}
}
这样的代码更易于理解,而且也更简单。