【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 }
相关推荐
xvch1 天前
Kotlin 2.1.0 入门教程(二十四)泛型、泛型约束、绝对非空类型、下划线运算符
android·kotlin
zhangphil1 天前
Android Coil ImageLoader MemoryCache设置Key与复用内存缓存,Kotlin
android·kotlin
mmsx1 天前
kotlin Java 使用ArrayList.add() ,set()前面所有值被 覆盖 的问题
android·开发语言·kotlin
lavins1 天前
android studio kotlin项目build时候提示错误 Unknown Kotlin JVM target: 21
jvm·kotlin·android studio
面向未来_2 天前
JAVA Kotlin Androd 使用String.format()格式化日期
java·开发语言·kotlin
alexhilton2 天前
选择Retrofit还是Ktor:给Android开发者的指南
android·kotlin·android jetpack
GordonH19912 天前
Kotlin 优雅的接口实现
android·java·kotlin
wangz762 天前
Android 下用kotlin写一个sqlite
android·sqlite·kotlin·jetpack compose
yzpyzp3 天前
kotlin中RxHttp的toAwaitResponse和awaitResult函数的使用
android·kotlin
帅次3 天前
Flutter 异步编程利器:Future 与 Stream 深度解析
android·flutter·ios·小程序·kotlin·webview·android-studio