1

这是疯狂,还是这是斯巴达?

groovy:000> b = [1,2,3,4]
===> [1, 2, 3, 4]
groovy:000> b.count { !it.equals(4) }
===> 0
groovy:000> b.count { !it == 4 }     
===> 0
groovy:000> b.count { it == 4 } 
===> 0
groovy:000> b.count { it == 1 }
===> 0
groovy:000> b[0]
===> 1
groovy:000> b.each { println it }
1
2
3
4
===> [1, 2, 3, 4]
groovy:000> print b.class
class java.util.ArrayList===> null
groovy:000> b.each { println it.class }
class java.lang.Integer
class java.lang.Integer
class java.lang.Integer
class java.lang.Integer
===> [1, 2, 3, 4]
groovy:000> 4.equals(b[3])
===> true
groovy:000> 

我在这里遇到了“令人惊讶的期望”的情况。Groovy 告诉我,我有一个整数的 ArrayList,我希望我应该能够像上面 3 个查询一样简洁而甜美地进行可爱的小搜索。但不是。

  1. 执行上述操作的惯用 Groovy 方式是什么(计算 x != some element 的元素数量)
  2. 为什么这不起作用?
4

2 回答 2

3

请注意方法签名

public Number count(Closure closure)

从 Groovy 1.8.0 开始支持(当前生产是 1.7.10) - 请参阅http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#count(groovy.lang.Closure)

在 Groovy 1.8 之前,上面的代码调用方法 'count(Object value)',它计算集合中给定值的出现次数。提供一个闭包实例作为实际参数“值”会导致上述结果。

于 2011-04-26T06:31:47.110 回答
3

执行上述操作的惯用 Groovy 方式是什么(计算 x != some element 的元素数量)

这是一种方法:

def list = [3, 5, 3]

def countElementsNotEqualTo3 = list.findAll{ it != 3 }.size()
assert countElementsNotEqualTo3 == 1
于 2011-04-26T08:11:18.170 回答