目录
📌 Kotlin 的 Lambda 表达式详解
🎯 什么是 Lambda 表达式?
🔥 1. Lambda 表达式的基本语法
✅ 示例 1:Lambda 基本写法
✅ 示例 2:使用 it 关键字(单参数简化)
✅ 示例 3:Lambda 作为函数参数
✅ 示例 4:Lambda 作为高阶函数的参数
🔍 2. Kotlin Lambda 的应用场景
✅ 1️⃣ Lambda 与 map 转换集合
✅ 2️⃣ Lambda 与 filter 过滤元素
✅ 3️⃣ Lambda 与 forEach 遍历集合
✅ 4️⃣ Lambda 与 sortedBy 排序
✅ 5️⃣ Lambda 与 groupBy 分组
🚀 3. Lambda 表达式进阶
✅ 1️⃣ 带返回值的 Lambda
✅ 2️⃣ Lambda 作为返回值
✅ 3️⃣ Lambda 与 apply、let、run、also
🎯 4. 总结
📌 Kotlin 的 Lambda 表达式详解
🎯 什么是 Lambda 表达式?
Lambda 表达式是一种 匿名函数,可以用更简洁的方式表示 函数,并作为参数传递给其他函数。它是 Kotlin 函数式编程的重要特性,类似于 Java 的 Lambda,但更加灵活。
在 Kotlin 中,Lambda 表达式的语法如下:
val lambdaName: (参数类型) -> 返回类型 = { 参数名: 参数类型 -> 函数体 }
🔥 1. Lambda 表达式的基本语法
👉 Lambda 语法结构
{ 参数1: 类型, 参数2: 类型 -> 函数体 }
如果 Lambda 只有一个参数,可以使用 it
关键字省略参数名。
✅ 示例 1:Lambda 基本写法
// Lambda 表达式赋值给变量
val add: (Int, Int) -> Int = { a, b -> a + b }println(add(3, 5)) // 输出: 8
📌 解析:
-
val add: (Int, Int) -> Int
👉 表示add
是一个接收两个Int
类型参数并返回Int
类型的 Lambda。 -
{ a, b -> a + b }
👉 这是 Lambda 的实现部分。
✅ 示例 2:使用 it
关键字(单参数简化)
如果 Lambda 只有 一个参数,可以用 it
代替参数名:
val square: (Int) -> Int = { it * it }println(square(4)) // 输出: 16
📌 解析:
-
{ it * it }
👉it
代表传入的唯一参数。
✅ 示例 3:Lambda 作为函数参数
在 Kotlin 中,Lambda 通常作为参数传递给其他函数,如 map
、filter
、forEach
等。
val numbers = listOf(1, 2, 3, 4, 5)// 使用 Lambda 过滤偶数
val evenNumbers = numbers.filter { it % 2 == 0 }println(evenNumbers) // 输出: [2, 4]
📌 解析:
-
filter { it % 2 == 0 }
👉 这个 Lambda 只保留偶数。 -
it
👉 代表filter
作用的每个元素。
✅ 示例 4:Lambda 作为高阶函数的参数
高阶函数是接收 Lambda 作为参数或者返回 Lambda 的函数。
fun operate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {return operation(a, b)
}// 传递 Lambda
val result = operate(10, 5) { x, y -> x - y }
println(result) // 输出: 5
📌 解析:
-
operation: (Int, Int) -> Int
👉 代表 Lambda 需要接收两个Int
参数,并返回Int
结果。 -
{ x, y -> x - y }
👉 传递 Lambda 计算10 - 5
。
🔍 2. Kotlin Lambda 的应用场景
Lambda 主要用于高阶函数,在 Kotlin 中被广泛应用,如集合操作、回调、DSL(领域特定语言)等。
✅ 1️⃣ Lambda 与 map
转换集合
val numbers = listOf(1, 2, 3, 4)// 使用 Lambda 对列表元素进行平方
val squaredNumbers = numbers.map { it * it }println(squaredNumbers) // 输出: [1, 4, 9, 16]
📌 解析:
-
map { it * it }
👉 将numbers
中的每个元素平方后返回新列表。
✅ 2️⃣ Lambda 与 filter
过滤元素
val words = listOf("Kotlin", "Java", "Python", "Swift")// 过滤包含 'a' 的单词
val filteredWords = words.filter { "a" in it }println(filteredWords) // 输出: [Java]
📌 解析:
-
filter { "a" in it }
👉 只保留包含a
的单词。
✅ 3️⃣ Lambda 与 forEach
遍历集合
val names = listOf("Alice", "Bob", "Charlie")names.forEach { println(it) }// 输出:
// Alice
// Bob
// Charlie
📌 解析:
-
forEach { println(it) }
👉 逐个打印列表元素。
✅ 4️⃣ Lambda 与 sortedBy
排序
val people = listOf("Tom", "Alice", "Bob")// 按字母顺序排序
val sortedPeople = people.sortedBy { it.length }println(sortedPeople) // 输出: [Tom, Bob, Alice]
📌 解析:
-
sortedBy { it.length }
👉 按字符串长度排序。
✅ 5️⃣ Lambda 与 groupBy
分组
val words = listOf("apple", "banana", "cherry", "blueberry")// 按单词首字母分组
val groupedWords = words.groupBy { it.first() }println(groupedWords)
// 输出: {a=[apple], b=[banana, blueberry], c=[cherry]}
📌 解析:
-
groupBy { it.first() }
👉 按首字母分组。
🚀 3. Lambda 表达式进阶
✅ 1️⃣ 带返回值的 Lambda
在 Lambda 中,return
只能用于 具名函数,不能直接用于 Lambda。
val sum = { a: Int, b: Int -> a + b }
println(sum(4, 5)) // 输出: 9
如果 Lambda 需要显式 return
,必须加上 @标签
:
fun test() {listOf(1, 2, 3, 4).forEach {if (it == 2) return@forEach // 只跳出当前 Lambdaprintln(it)}println("结束")
}test()
// 输出:
// 1
// 3
// 4
// 结束
✅ 2️⃣ Lambda 作为返回值
fun getLambda(): (Int) -> Int {return { it * 2 }
}val double = getLambda()
println(double(5)) // 输出: 10
📌 解析:
-
getLambda()
👉 返回一个Lambda
,用于将输入值 *2。
✅ 3️⃣ Lambda 与 apply
、let
、run
、also
Kotlin 提供了一些 内置扩展函数,让代码更简洁。
data class Person(var name: String, var age: Int)val person = Person("Alice", 20).apply {name = "Bob"age = 25
}println(person) // 输出: Person(name=Bob, age=25)
📌 解析:
-
apply {}
👉 在对象Person
上直接操作,无需person.name = "Bob"
。
🎯 4. 总结
Lambda 特性 | 说明 |
---|---|
匿名函数 | 可以作为参数传递 |
简洁性 | 代码更短,更直观 |
高阶函数 | Lambda 可以作为参数或返回值 |
it 关键字 | 单参数 Lambda 省略参数名 |
与集合操作结合 | map 、filter 、sortedBy 等 |
DSL 支持 | Kotlin DSL 语法依赖 Lambda |
💡 Lambda 使 Kotlin 代码更简洁、高效,是 Kotlin 编程的重要特性!🚀