我知道我们不能像 .each{} 闭包那样在 groovy 中从 .find{} 闭包返回。我仍然很好奇为什么下面的代码只执行 .find{} 的第一次迭代。

def findlist = [1,2,3,4,5]
def eachlist = [7,6,5]

findlist.find
{
    int findelem = it
    println "findelem : " + findelem
    eachlist.each
    {
        int eachelem = it
        println "eachelem : " + eachelem
        if(it == findelem)
        {
            return true
        }
        return false
    }
}

它打印:
findelem : 1
eachelem : 7
eachelem : 6
eachelem : 5

为什么 find{} 在第一次迭代后退出?

PS:我知道这段代码可能没有任何实际意义,只是对常规行为感到好奇。

最佳答案

因为 each 返回未修改的集合正在迭代。返回的集合计算为 true ,因此 find 在第一次迭代后停止。

看看下面的代码:

assert [1, 2].each { println it } == [1,2]

assert [1,2].find { println it; [3, 4].each { e -> println e } }

您需要嵌套 find 而不是 each

关于groovy - 在 find{} 中嵌套每个{},我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33955196/

10-16 17:47