代码之家  ›  专栏  ›  技术社区  ›  HelloCW

在科特林如何回到前臂外?[复制品]

  •  2
  • HelloCW  · 技术社区  · 6 年前

    我希望回到生产线 aa@ logError("Done") 外部 forEach 但是 return@aa 不起作用,而且 break@label 也不管用。

    更多,如果你使用 return ,它将回到娱乐圈之外 lookForAlice !

    data class Person(val name: String, val age: Int)
    val people = listOf(Person("Paul", 30), Person("Alice", 29), Person("Bob", 31))
    
    
    fun lookForAlice(people: List<Person>) {
        people.forEach label@{
            logError("Each: "+it.name)
            if (it.name == "Alice") {
                logError("Find")                                 
                return@aa  //It's fault
            }
        }
        aa@ logError("Done")
    }
    
    lookForAlice(people)
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   Naetmul    6 年前

    对每个循环使用传统方法。

    即改变

    people.forEach label@{
    

    for (it in people) {
    

    变化 return break .


    注释 :阅读这些文章 返回 在里面 .forEach()

    `break` and `continue` in `forEach` in Kotlin

    How do I do a "break" or "continue" when in a functional loop within Kotlin? (此问题可能是此问题的副本)

        2
  •  0
  •   advice    6 年前

    你想用 find 相反。它会回来 Person? . 所以您可以检查它是否为空。如果没有,你会发现 Alice .

    data class Person(val name: String, val age: Int)
    val people = listOf(Person("Paul", 30), Person("Alice", 29), Person("Bob", 31))
    val alice: Person? = findAlice(people)
    
    
    fun findAlice(people: List<Person>): Person? {
        return people.find { it.name == "Alice" }
    }