对比Java学Kotlin在 foreach 中使用 break&continue

Posted 陈蒙_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对比Java学Kotlin在 foreach 中使用 break&continue相关的知识,希望对你有一定的参考价值。

正常情况下,我们只能在 loop 中使用 break 和 continue。但是 foreach 是扩展函数,不属于 loop 的范畴,如果我们想在 foreach 中达到 break 和 continue 的效果,只能使用 return@label 来实现:

continue:

fun foo() 
    listOf(1, 2, 3, 4, 5).forEach lit@
        if (it == 3) return@lit // local return to the caller of the lambda - the forEach loop
        print(it)
    
    print(" done with explicit label")

执行结果为:1245 done with explicit label

或者

fun foo() 
    listOf(1, 2, 3, 4, 5).forEach 
        if (it == 3) return@forEach // local return to the caller of the lambda - the forEach loop
        print(it)
    
    print(" done with explicit label")

执行结果为:1245 done with explicit label

break:

fun foo() 
    run loop@
        listOf(1, 2, 3, 4, 5).forEach 
            if (it == 3) return@loop // non-local return from the lambda passed to run
            print(it)
        
    
    print(" done with nested loop")

执行结果:12 done with nested loop

如果是查询场景,建议使用 .map() 操作符来完成,从而避免 continue 或 break 语句。比如我们有一个字符串类型的 List [“1”, “2”, “3”],我们需要匹配的是 “2_”,则可以使用 map 操作符先将 List 的元素变形为 “n_” 的形式,然后直接使用 contains() 方法寻找其是否存在:

val target = "2_"
val match = listOf("1", "2", "3").map  it.plus("_") .contains(target)

以上是关于对比Java学Kotlin在 foreach 中使用 break&continue的主要内容,如果未能解决你的问题,请参考以下文章

对比Java学Kotlin在 foreach 中使用 break&continue

对比Java学Kotlinfor 循环方式

对比Java学Kotlin密封类

对比Java学Kotlin密封类

对比Java学Kotlin密封类

对比Java学Kotlin常量