美文网首页
关于 kotlin foreach 循环的 return 的问题

关于 kotlin foreach 循环的 return 的问题

作者: ChenME | 来源:发表于2020-09-07 20:32 被阅读0次

    关于 kotlin foreach 循环的 return 的问题

    1. 直接使用 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 
    
    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!
    
    1. 在外面嵌套一个 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!
    

    注意:

    1. 不添加标签是不行的
    2. 可以是任意 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!
    

    相关文章

      网友评论

          本文标题:关于 kotlin foreach 循环的 return 的问题

          本文链接:https://www.haomeiwen.com/subject/kfolektx.html