Kotlin用集合中的lastOrNull()替换isEmpty()和last()

我想使用类似(代码如下),但我认为必须有使用lastOrNull()而不是使用isEmptylast()的更好的解决方案,

 data class Entry(val x: Float, val y: Float) 

 var entries: MutableList = ArrayList() if(some) { entries.add(Entry(100f, 200f) } val foo = (if (entries.isEmpty()) 0f else entries.last().y) + 100f 

有没有更好的方法像entries.lastOrNull()?.y if null 0f

你可以使用Kotlin elvis操作符 ?: ,例如:

 // if the expression `entries.lastOrNull()?.y` is null then return `0f` // v val lastY = entries.lastOrNull()?.y ?: 0f 

对于上面代码中的expression式,可以使用safe-call ?.let ?.run来更清晰地显示代码,例如:

 //val foo = if (entries.isEmpty()) 0f else entries.last().y + 100f else 100f // if no Entry in List return `0F` ---v val foo = entries.lastOrNull()?.run { y + 100 } ?: 0F // ^--- otherwise make the last.y + 100 

如果我已经设法正确地理解你,这将会做这个工作:

 val foo = if (entries.isEmpty()) 0f else entries.lastOrNull()?.y ?: 0f + 100f