我知道我们不能像 .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/