先来看看什么是Lambdas

高阶函数,名字看起来挺能唬人的,其实就是把函数作为参数的函数,看看栗子就明白了:

fun hehe(action: () -> Int) :Int{
    return action()
}
///////调试///////////
fun main(args: Array<String>) {
    println(hehe{ 2*3})
}
///////输出///////////
6

可以看到,hehe()是一个函数,hehe()中的参数是另一个函数,这个函数的名叫action,action是一个无参且返回类型为Int的函数,这就是一个简单的高阶函数。

上面的栗子中,hehe{2*3}就是一个Lambdas表达式,先来看看Lambdas表达式的定义:

1. A lambda expression is always surrounded by curly braces,
2. Its parameters (if any) are declared before -> (parameter types may be omitted),
3. The body goes after -> (when present).
/////////////翻译过来//////////
1.一个Lambdas表达式是被{}所包围的语句块
2.Lambdas表达式的参数是在 ->前面声明的(参数的类型可以被省略)
3.Lambdas表达式的代码块(函数的具体实现)是放在 ->后面的

再来看一个牛逼(复杂)点的Lambdas表达式(map函数):

fun <T, R> List<T>.map(transform: (T) -> R): List<R> {
    val result = arrayListOf<R>()
    for (item in this)
        result.add(transform(item))
    return result
}
//////////调试/////////////
val ints = arrayListOf<Int>
val doubled = ints.map { it -> it * 2 }
//it可以代替表示List中的元素

map函数作用于List,它的参数是泛型T,它返回一个泛型R。map的作用是将一个参数泛型为T的List转换为一个参数泛型为R的List,在map的实现代码块中,先声明一个参数泛型为R的List(这个List是最终作为返回结果的List),然后在for循环里面,迭代this (this即为调用map方法的List) ,通过transform将参数泛型为T的List转换为参数泛型为R的List。

其实Lambdas表达式就是一个匿名的函数(可以类比Java中的匿名类)

经验分享 程序员 微信小程序 职场和发展