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之前的参数,因此您将调用,它将告诉您闭包在列表中存在了多少次(它说没有)