关于 kotlin foreach 循环的 return 的问题
- 直接使用
return
,会返回整个包裹循环的调用的函数
val li = arrayListOf(0, 1, 2, 3, 4)
@Test
fun lopperTest() {
li.forEach {
if (it == 2) {
return
}
print("$it \t")
}
println("\ntest func is end!")
}
// 结果
// 0 1
- 使用
return@XXX
中断本次执行,继续下次循环,类似于continue
val li = arrayListOf(0, 1, 2, 3, 4)
@Test
fun lopperTest() {
li.forEach {
if (it == 2) {
return@forEach
}
print("$it \t")
}
println("\ntest func is end!")
}
// 结果
// 0 1 3 4
// test func is end!
val li = arrayListOf(0, 1, 2, 3, 4)
@Test
fun lopperTest() {
li.forEach tag@{
if (it == 2) {
return@tag
}
print("$it \t")
}
println("\ntest func is end!")
}
// 结果
// 0 1 3 4
// test func is end!
- 在外面嵌套一个 lambda 表达式并添加标签,实现类似
break
的操作
val li = arrayListOf(0, 1, 2, 3, 4)
@Test
fun lopperTest() {
run tag@{
li.forEach {
if (it == 2) {
return@tag
}
print("$it \t")
}
}
println("\ntest func is end!")
}
// 结果
// 0 1
// test func is end!
注意:
- 不添加标签是不行的
- 可以是任意 lambda 表达式,不仅限于例子中的
run
val li = arrayListOf(0, 1, 2, 3, 4)
@Test
fun lopperTest() {
run {
li.forEach {
if (it == 2) {
return
}
print("$it \t")
}
}
println("\ntest func is end!")
}
// 结果
// 0 1
val li = arrayListOf(0, 1, 2, 3, 4)
var aaa: String? = null
@Test
fun lopperTest() {
aaa = "111"
aaa?.apply tag@{
li.forEach {
if (it == 2) {
return@tag
}
print("$it \t")
}
}
println("\ntest func is end!")
}
// 结果
// 0 1
// test func is end!