加载中...

函数式API

Lambda表达式

{参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}

例:maxBy函数

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val lambda = { fruit: String -> fruit.length }
val maxLengthFruit = list.maxBy(lambda)

即:

val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })

然后Kotlin规定,当Lambda参数是函数的最后一个参数时,可以将Lambda表达式移到函数括号的外面,如下所示:

val maxLengthFruit = list.maxBy() { fruit: String -> fruit.length }

接下来,如果Lambda参数是函数的唯一一个参数的话,还可以将函数的括号省略:

val maxLengthFruit = list.maxBy { fruit: String -> fruit.length }
Lambda表达式中的参数列表其实在大多数情况下不必声明参数类型,因此代码可
以进一步简化成:

val maxLengthFruit = list.maxBy { it.length }

map函数

fun main() {
 val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
 val newList = list.map { it.toUpperCase() }
 for (fruit in newList) {
 println(fruit)
 }
}

filter函数

fun main() {
   val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
   val newList = list.filter { it.length <= 5 }
                     .map { it.toUpperCase() }
   for (fruit in newList) {
       println(fruit)
   }
}

any和all函数

fun main() {
 val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
 val anyResult = list.any { it.length <= 5 }
 val allResult = list.all { it.length <= 5 }
 println("anyResult is " + anyResult + ", allResult is " + allResult)
}

let函数与空指针检查

ps:let函数可以处理全局变量的判空问题

fun doStudy(study: Study?) {
 study?.let {
 it.readBooks()
 it.doHomework()
 }
}
posted @ 2022-09-06 15:18  biubidio  阅读(55)  评论(0)    收藏  举报