Lambda 表达式是什么以及如何使用

目录

📌 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 通常作为参数传递给其他函数,如 mapfilterforEach 等。

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  // 只跳出当前 Lambda
        println(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 与 applyletrunalso

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 省略参数名
与集合操作结合mapfiltersortedBy
DSL 支持Kotlin DSL 语法依赖 Lambda

💡 Lambda 使 Kotlin 代码更简洁、高效,是 Kotlin 编程的重要特性!🚀

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王景程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值