函数式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()
}
}