【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 }
相关推荐
jinanwuhuaguo13 小时前
(第二十七篇)OpenClaw四月的演化风暴:OpenClaw 2026年4月全版本更新的文明级解读
大数据·人工智能·架构·kotlin·openclaw
我命由我1234513 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
小书房18 小时前
Kotlin的by
android·开发语言·kotlin·委托·by
jinanwuhuaguo18 小时前
(第二十八篇)OpenClaw成本与感知的奇点——从“Token封建制”到“全民养虾”的本体论地基
android·人工智能·kotlin·拓扑学·openclaw
jinanwuhuaguo2 天前
OpenClaw联邦之心——从孤岛记忆到硅基集体潜意识的拓扑学革命(第二十三篇)
android·人工智能·kotlin·拓扑学·openclaw
pengyu2 天前
【Kotlin 协程修仙录 · 筑基境 · 后阶】 | 调度器的艺术:Dispatchers 四大护法与 withContext 性能密码
android·kotlin
千码君20162 天前
flutter: 分享一下基于trae cn 构建的过程
java·vscode·flutter·kotlin·trae
小书房3 天前
Kotlin的内联函数
java·开发语言·kotlin·inline·内联函数
zhangphil3 天前
Android Page3与Flow分页查媒体数据库展示宫格图片列表,Kotlin
android·kotlin
胡致和4 天前
配置变更后,弹窗为什么飞到了最左边?
kotlin