Lambda: 是一小段可以作为参数传递的代码, 作为实参
结构:
{参数名1: 类型, 参数名1: 类型 -> 函数体}
最后一行代码会自动作为Lambda 表达式的返回值
思考一个需求: 在水果集合中找到字符最长的水果
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
第一版:
var maxLengthFruit = ""
for (fruit in list) {
if (fruit.length > maxLengthFruit .length) {
maxLengthFruit = fruit
}
}
println("max length fruit is " + maxLengthFruit)
第二版:使用集合API: maxBy
val lambda = {fruit: String -> fruit.length }
val maxLengthFruit = list.maxBy(lambda)
第三版:
lambda定义多余,直接返回
val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })
参数是函数最后一个参数时, 可以把表达式移到括号外面:
val maxLengthFruit = list.maxBy() {fruit:String -> fruit.length }
如果参数唯一可以省略这个括号
val maxLengthFruit = list.maxBy {fruit:String -> fruit.length }
当只有一个参数时,不必声明参数名, 使用it代替
val maxLengthFruit = list.maxBy() {it.length }
最终版:简化后的lambda
val maxLengthFruit = list.maxBy { it.length }
println("max length fruit is " + maxLengthFruit)
使用map函数, 可以将集合每个元素映射成另外值,最终生成一个新的集合,如所有水果大写
val newList = list.map {it.toUpperCase()}
for (fruit in newList) {
println(fruit)
}