Collections Groovy集合:用字符串计算古怪

Collections Groovy集合:用字符串计算古怪,collections,groovy,Collections,Groovy,我试图计算对象成员中的字符串值。我试过三种方法,但只有一种有效。我对那个有效的很好,但是我不明白为什么其他的失败了。代码如下: void testCount() { TestObj a = new TestObj() TestObj b = new TestObj() TestObj c = new TestObj() a.s = "one" b.s = "two" c.s = "two" def list = [a, b, c]

我试图计算对象成员中的字符串值。我试过三种方法,但只有一种有效。我对那个有效的很好,但是我不明白为什么其他的失败了。代码如下:

void testCount() {
    TestObj a = new TestObj()
    TestObj b = new TestObj()
    TestObj c = new TestObj()
    a.s = "one"
    b.s = "two"
    c.s = "two"

    def list = [a, b, c]

    def count = 0
    list.each{
        if (it.s.equals("two"))
            count++
    }
    assertTrue("each test failed", count == 2)
    assertTrue("collectAll test failed", list.collectAll{ it.s.equals("two")}.size() == 2)
    assertTrue("count test failed", list.count{ it.s.equals("two")} == 2)        
}
我希望传递给collectAll和count的闭包与我在each方法中所做的相同。但是对于collectAll,它返回所有3个对象,而对于count,它总是返回0

我遗漏了什么?

正在浏览列表,并返回一个布尔值(这是闭包为列表中的每个元素返回的值)

因此,您得到了
[false,true,true]
,它有3个元素

对于
计数

list.count{ it.s == "two" }
返回
2
(按预期)

顺便说一句:您可以在groovy中执行
it.s=='two'
。。不需要所有的
.equals(“两个”)

编辑计数示例: 为我打印
2

编辑2 找到原因(从下面的注释中),作为1.8之前的一个参数,因此您将调用,它将告诉您闭包实例在列表中存在多少次(正如它所说的,它是无的)

正在遍历您的列表,并返回一个布尔值(这是闭包为列表中的每个元素返回的值)

因此,您得到了
[false,true,true]
,它有3个元素

对于
计数

list.count{ it.s == "two" }
返回
2
(按预期)

顺便说一句:您可以在groovy中执行
it.s=='two'
。。不需要所有的
.equals(“两个”)

编辑计数示例: 为我打印
2

编辑2
找到原因(从下面的注释中),作为1.8之前的一个参数,因此您将调用,它将告诉您关闭实例在列表中存在多少次(正如它所说的,它是无的)

谢谢。这次收集肯定是一次虚假的测试。但我并没有从列表中得到爱。它仍然返回0。我已验证这是否适用于其他人。一定是因为我的环境。谢谢Tim的快速回复。我猜问题实际上在groovy 1.7.x中。我这边让它工作的人正在使用groovy 1.8.ahhhh是的,作为1.8之前的参数,因此您将调用,它将告诉您闭包在列表中存在了多少次(它说没有),谢谢。这次收集肯定是一次虚假的测试。但我并没有从列表中得到爱。它仍然返回0。我已验证这是否适用于其他人。一定是因为我的环境。谢谢Tim的快速回复。我猜问题实际上在groovy 1.7.x中。我这边让它工作的人正在使用groovy 1.8.ahhhh是的,作为1.8之前的参数,因此您将调用,它将告诉您闭包在列表中存在了多少次(它说没有)