Kotlin 函数式 API 合集一

202 阅读2分钟

elementAtOrElse & getOrElse

  • 源码

carbon (1).png

  • 说明

返回给定索引的元素,如果索引超出列表的范围,则返回调用defaultValue函数的结果

  • 示例
val list = listOf("tom", "rose", "riley", "frank")
println(list.elementAtOrElse(2) { 1 })
println(list.elementAtOrElse(-1) { list.first() })//返回数组的第一个
println(list.elementAtOrElse(4) { "defaultName" })//返回指定的值
println(list.elementAtOrElse(4) { UserInfo("tom", 21, 178) })//返回指定泛型结果
println(list.getOrNull(0)) //返回给定索引的元素,没有则返回null
println(list.getOrNull(-1))

data class UserInfo(val name: String, val age: Int, val height: Int)//下文也有用到

打印结果:
riley
tom
defaultName
UserInfo(name=tom, age=21, height=178)
tom
null

elementAtOrNull

  • 源码

carbon (2).png

  • 说明

返回给定索引的元素,如果索引超出列表的范围,则返回null

  • 示例
val list = listOf("tom", "rose", "riley", "frank")
println(list.elementAtOrNull(2))
println(list.elementAtOrNull(-1))
println(list.elementAtOrNull(4))

打印结果:
riley
null
null

find

  • 源码

carbon (3).png

  • 说明

返回满足给定条件的第一个元素,若没有,则返回null

  • 示例
val list = listOf("tom", "rose_1", "riley", "frank", "rose_2")
println(list.find { it.startsWith("rose") })
println(list.findLast { it.startsWith("rose") })//findLast同理,返回满足给定条件的最后一位

rose_1
rose_2

first

  • 源码

carbon (4).png

  • 说明

返回满足给定条件的第一个元素,若没有,则抛出NoSuchElementException

  • 示例
val list = listOf("tom", "rose_1", "riley", "frank", "rose_2")
println(list.first()) //first()同理,若数组size为0,同样也会抛出异常NoSuchElementException
println(list.firstOrNull()) //返回第一个元素,若没有,则返回null
println(list.first { it == "ben" })


打印结果:
tom
tom
Exception in thread "main" java.util.NoSuchElementException: Collection contains no element matching the predicate.

firstNotNullOf

  • 源码

carbon (5).png

  • 说明

返回转换函数的第一个非空的值,若没有,则抛出异常NoSuchElementException

  • 示例
val userInfoList = arrayListOf(
    UserInfo("tom", 21, 178), UserInfo("rose", 20, 165), UserInfo("Riley", 30, 168)
)
println(userInfoList.firstNotNullOf { it.height.takeIf { it > 170 } })
println(userInfoList.firstNotNullOf { it.height.takeIf { it > 180 } })

打印结果:
178
Exception in thread "main" java.util.NoSuchElementException: No element of the collection was transformed to a non-null value.

single

  • 源码

carbon (6).png

  • 说明

返回满足给定条件的唯一元素,若没有,则抛出异常NoSuchElementException,若有多个,则抛出异常IllegalArgumentException

  • 示例
val list = listOf("tom", "rose", "riley", "frank", "rose")
println(list.single { it == "frank" })
println(list.single { it == "rose" })

打印结果:
frank
Exception in thread "main" java.lang.IllegalArgumentException: Collection contains more than one matching element.

未完待续...