Groovy 使用零整数时查找中的错误?

Groovy 使用零整数时查找中的错误?,groovy,find,findall,Groovy,Find,Findall,我无意中发现了find函数的这种奇怪行为 如果使用“find”在整数数组中查找0,则即使数组中有0,也会返回null。如果我对“findall”或其他值(如2)尝试相同的方法,它将按预期工作 我精简了我的原始代码,以生成此代码片段来重现行为: id = 0 class Node { int id = 1 Set Nlinks = [0] } b1 = [new Node()].find{it.Nlinks.find{it2 -> it2 == id }} b2 = [n

我无意中发现了find函数的这种奇怪行为

如果使用“find”在整数数组中查找0,则即使数组中有0,也会返回null。如果我对“findall”或其他值(如2)尝试相同的方法,它将按预期工作

我精简了我的原始代码,以生成此代码片段来重现行为:

id = 0

class Node {
    int id = 1
    Set Nlinks = [0]
}

b1 = [new Node()].find{it.Nlinks.find{it2 -> it2 == id }}
b2 = [new Node()].find{it.Nlinks.findAll{it2 -> it2 == id }}

println(b1?.id + " " + b2?.id) // Output: null 1

id2 = 2

class Node2 {
    int id = 1
    Set Nlinks = [2]
}

b3 = [new Node2()].find{it.Nlinks.find{it2 -> it2 == id2 }}
b4 = [new Node2()].find{it.Nlinks.findAll{it2 -> it2 == id2 }}

println(b3?.id + " " + b4?.id) // Output: 1 1
​这是预期的行为,我遗漏了一些东西,为什么这应该是它的行为方式,或者这是一个错误

b1 = [new Node()].find{it.Nlinks.find{it2 -> it2 == id }}
[0].find{it==0}
(嵌套查找)将查找并返回0的问题

父查找表达式的计算结果为
0

b1 = [new Node()].find{ 0 }
groovy中的
0
(零)=false

因此,只需将表达式更改为:

b1 = [new Node()].find{it.Nlinks.find{it2 -> it2 == id }!=null}


ahhh现在我明白了,我忽略了外部查找中布尔Groovy Magic的隐式整数:)嵌套的查找返回一个整数,外部查找只将int计算为true,除非它得到0,否则它的计算结果为false。findAll之所以有效,是因为它返回一个包含一个元素的数组,而且总是这样。谢谢:)别忘了引擎盖下的Java:b1=[new Node()]。找到{it.Nlinks.contains(id)}