【Kotlin】

Lambda 就是一小段可以作为参数传递的代码。

因为正常情况下,我们向某个函数传参时只能传入变量,而借助Lambda 却允许传入一小段代码。

Lambda 表达式的语法结构:

kt 复制代码
{参数名1: 参数类型, 参数名2: 参数类型 -> 函数体}

首先,最外层是一对大括号。

如果有参数传入到 Lambda 表达式中的话,我们还需要声明参数列表,参数列表的结尾使用一个->符号,表示参数列表的结束以及函数体的开始。

函数体中可以编写任意行代码(虽然不建议编写太长的代码),并且最后一行代码会自动作为Lambda 表达式的返回值。

kt 复制代码
{
	参数名1: 参数类型, 参数名2: 参数类型
	->
	函数体
}

例子:

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

maxBy就是一个普通的函数而已,只不过它接收的是一个Lambda 类型的参数,并且会在遍历集合时将每次遍历的值作为参数传递给Lambda 表达式。工作原理是根据我们传入的条件来遍历集合,从而找到该条件下的最大值,比如说想要找到单词最长的水果, 那么条件自然就应该是单词的长度了。

所以人话是:maxBy遍历集合list,将item作为"参数"传入Lambda表达式。条件是:fruit.length

简化过程:

kt 复制代码
// 不需要专门定义一个lambda变量
val maxLengthFruit = list.maxBy({ fruit: String -> fruit.length })

// 当Lambda 参数是函数的最后一个参数时,可以将Lambda 表达式移到函数括号的外面
val maxLengthFruit = list.maxBy() { fruit: String -> fruit.length }

// 如果Lambda 参数是函数的唯一一个参数的话,还可以将函数的括号省略
val maxLengthFruit = list.maxBy { fruit: String -> fruit.length }

// 由于Kotlin拥有出色的类型推导机制,Lambda 表达式中的参数列表其实在大多数情况下不必声明参数类型
val maxLengthFruit = list.maxBy { fruit -> fruit.length }

// 当Lambda 表达式的参数列表中只有一个参数时,也不必声明参数名,而是可以使用it 关键字来代替
val maxLengthFruit = list.maxBy { it.length }
相关推荐
消失的旧时光-194319 小时前
Android回退按钮处理方法总结
android·开发语言·kotlin
VIjolie1 天前
协程CoroutineContext理解
kotlin
alexhilton2 天前
突破速度障碍:非阻塞启动画面如何将Android 应用启动时间缩短90%
android·kotlin·android jetpack
前行的小黑炭2 天前
Android Compose :初步了解一下生命周期,对比原生android
android·kotlin·app
消失的旧时光-19432 天前
Kotlin when 用法完整分享
android·开发语言·kotlin
麋鹿原2 天前
Android Room 数据库之数据库升级
数据库·kotlin
麋鹿原2 天前
Android Room 数据库之简单上手
前端·kotlin
消失的旧时光-19432 天前
Kotlin 判空写法对比与最佳实践
android·java·kotlin
木易 士心3 天前
MPAndroidChart 用法解析和性能优化 - Kotlin & Java 双版本
android·java·kotlin
消失的旧时光-19433 天前
Kotlin Flow 与“天然背压”(完整示例)
android·开发语言·kotlin