Lambda表达式的由繁化简推导

Kotlin中的函数参数类型为Lambda表达式时的由繁化简

Lambda表达式的语法结构如下:

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

首先我们来看下下面这段代码,在集合中找到最长的字符

val listOf = listOf("Apple", "Banana", "Orange")
val maxOf = listOf.maxOf { it.length }
println("maxOf $maxOf")

maxOf函数中,接收的参数其实是一个Lambda的参数,上面是最简化的步骤,那么它是怎么一步一步简化而来的呢?下面我来一一道来。上面的代码是由下面的代码简化而来的。

val listOf = listOf("Apple", "Banana", "Orange")
val lambda = { fruit: String -> fruit.length }
val maxOf = listOf.maxOf(lambda)
println("maxOf $maxOf")

我们将一个Lambda表达式放入了maxOf函数中。上面的这种比较啰嗦,简化的点非常多,让我们来一步一步的简化。

首先:我们不需要专门定义一个Lambda变量,而是可以直接将Lambda表达式传入maxOf函数当中,因此第一步简化后如下所示:

val listOf = listOf("Apple", "Banana", "Orange")
val maxOf = listOf.maxOf({ fruit: String -> fruit.length })
println("maxOf $maxOf")

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

val listOf = listOf("Apple", "Banana", "Orange")
val maxOf = listOf.maxOf() { fruit: String -> fruit.length }
println("maxOf $maxOf")

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

val listOf = listOf("Apple", "Banana", "Orange")
val maxOf = listOf.maxOf { fruit: String -> fruit.length }
println("maxOf $maxOf")

由于Kotlin拥有出色的类型推导机制,Lambda表达式中的参数列表其实在大多数情况下不必声明参数类型,因此代码可以进一步简化成:

val listOf = listOf("Apple", "Banana", "Orange")
val maxOf = listOf.maxOf { fruit -> fruit.length }
println("maxOf $maxOf")

最后,当Lambda表达式的参数列表中只有一个参数时,也不必声明参数名,而是可以使用it关键字来代替,那么代码就变成了:

val listOf = listOf("Apple", "Banana", "Orange")
val maxOf = listOf.maxOf {it.length }
println("maxOf $maxOf")

大功告成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿界新星蔡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值