如何在 kotlin 中获取 ArrayList 最后一项之前的项?
我有一个类似的清单
val myList = listOf("item1", "item2", "item3", "item4", "item5")
我想从我的列表中获取“item4”
myList[myList.lastIndex - 1]
在调用此函数之前,请务必检查数组中是否至少有两项
last()
: 的扩展函数
fun <T> List<T>.secondToLast(): T {
if (size < 2)
throw NoSuchElementException("List has less than two elements")
return this[size - 2]
}
你可以这样做:
myList.getOrNull(myList.lastIndex - 1)
这不需要额外的检查,但如果列表很小或为空,则会返回
null
。
此外,正如评论中提到的,您可以使用 elvis 运算符回退到其他值或场景:
myList.getOrNull(myList.lastIndex - 1) ?: "unknown"
或
myList.getOrNull(myList.lastIndex - 1) ?: return
同样对于此用例,您可以使用
.getOrElse
函数,您可以根据请求的索引选择后备方案:
myList.getOrElse(myList.lastIndex - 1) { index ->
// todo:
}
这个怎么样:
myList.dropLast(1).lastOrNull()
这不是很有效,但读起来真的很好。
Marko 在评论中提出了类似的、更有效的方法:
myList.takeLast(2).firstOrNull()