最近在写项目时遇到了一个关于kotlin跳出循环的问题,由于项目原因,直接拿下面的一个简单的例子做demo吧。
一. 问题
首先,我们先看一个正常的函数跳出循环,大家都会,我就直接贴代码:
val list = listOf(1, 2, 3, 4, 5)
for (num in list) {
if (count == 3) {
break // 退出循环
}
// 打印 1和2
println(num)
}
实际开发过程中,我使用了list.forEach函数
// label@标签
list.forEach label@{
if (it == 3) {
// 在这里return之后,实际上并没有跳出循环
return@label
}
// 打印 1 2 4 5
println("label:$it")
}
上述例子中,在调用return@label之后,实际并没有跳出循环,我们想要的是当it值为3时,就跳出循环,打印1、2,实际打印1、2、4、5,跟continue一样
for (i in list) {
if (i == 3) {
continue
}
println("continue:$i")
}
那么为什么forEach函数不可用跳出循环?
forEach
是一个高阶函数,它接收一个 lambda 表达式作为参数,并将其应用于集合中的每个元素。因为forEach
仅仅是对集合中的。
最后讲下list.forEach和for循环有什么区别
-
语法结构不同:
list.forEach
是一个高阶函数,它接收一个 lambda 表达式作为参数。而for (num in list)
是一个基于迭代器的语法结构,它使用in
关键字来遍历集合中的元素。 -
返回值不同:
list.forEach
没有返回值,它仅仅是将 lambda 表达式应用于集合中的每个元素。而for (num in list)
返回遍历过程中的每个元素,你可以使用这个返回值来做其他操作。 -
可读性不同:
list.forEach
的语法结构更加简洁,特别适合对集合进行简单的操作。而for (num in list)
的语法结构更加灵活,你可以在其中编写任意的逻辑处理。 -
可读性不同:
list.forEach
的语法结构更加简洁,特别适合对集合进行简单的操作。而for (num in list)
的语法结构更加灵活,你可以在其中编写任意的逻辑处理。
二. 结论
- 简单地对集合中的元素进行遍历就使用
list.forEach
- 遍历集合做复杂逻辑处理或者需要返回遍历的元素使用
for (num in list)
网友评论