在 kotlin 中,foreach
是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作。它的核心特点是 简洁、函数式,适用于需要遍历集合且无需返回值的场景。以下是详细说明和示例:
一、基本用法
1️⃣ 遍历集合
val list = listof("apple", "banana", "orange") // 使用 lambda 表达式 list.foreach { fruit -> println(fruit) } // 简化为 `it` list.foreach { println(it) }
2️⃣ 遍历数组
val array = arrayof(1, 2, 3) array.foreach { println(it) }
3️⃣ 遍历 map
val map = mapof("a" to 1, "b" to 2) // 遍历键值对(pair) map.foreach { (key, value) -> println("$key -> $value") } // 或直接使用 `it.key` 和 `it.value` map.foreach { println("${it.key}: ${it.value}") }
二、与 for 循环的区别
特性 | foreach | for 循环 |
---|---|---|
语法 | 函数式风格,通过 lambda 操作元素 | 传统循环结构 |
控制流 | 无法使用 break /continue | 支持 break /continue |
return 行为 | 默认从外层函数返回(需用标签控制) | 仅退出当前循环 |
适用场景 | 简单的遍历操作 | 需要复杂控制流或提前终止循环的场景 |
示例:return
的行为
fun testforeach() { listof(1, 2, 3).foreach { if (it == 2) return // 直接退出整个函数! println(it) } println("end") // 不会执行 } // 输出:1
使用标签控制 return
fun testforeachlabel() { listof(1, 2, 3).foreach { if (it == 2) return@foreach // 仅退出当前 lambda println(it) } println("end") // 会执行 } // 输出:1, 3, end
三、高级用法
1️⃣ 带索引遍历(结合 withindex
)
list.withindex().foreach { (index, value) -> println("$index: $value") }
2️⃣ 忽略参数(使用 _
)
list.foreachindexed { index, _ -> println("index $index") // 忽略元素值 }
3️⃣ 链式调用(结合其他高阶函数)
list.filter { it.length > 5 } .foreach { println(it) } // 先过滤再遍历
四、注意事项
避免副作用foreach
应仅用于遍历,不要在其中修改外部变量(除非必要)。
// ❌ 不推荐:修改外部状态 var count = 0 list.foreach { count++ } // ✅ 推荐:使用 `count()` 函数 val count = list.size
不要修改集合本身
遍历时修改集合(如增删元素)可能导致 concurrentmodificationexception
。
性能考量
对大数据量或性能敏感场景,优先使用 for
循环(性能略优)。
五、常见场景示例
1️⃣ 遍历并处理元素
val numbers = listof(10, 20, 30) numbers.foreach { val squared = it * it println(squared) }
2️⃣ 遍历文件内容
file("data.txt").readlines().foreach { line -> println(line.trim()) }
3️⃣ 验证数据
data class user(val name: string, val age: int) val users = listof(user("alice", 30), user("bob", 17)) users.foreach { user -> require(user.age >= 18) { "${user.name} 未成年!" } }
六、总结
• 核心作用:遍历集合元素并执行操作。
• 适用场景:简单遍历、无需返回值的操作。
• 替代方案:需要复杂控制流时用 for
循环;需要返回新集合时用 map
/filter
。
通过 foreach
可以让代码更简洁,但需注意其局限性。
到此这篇关于kotlin的函数foreach的文章就介绍到这了,更多相关kotlin函数foreach内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论