Groovy 元素比较

发布于 2024-11-03 11:22:03 字数 854 浏览 0 评论 0 原文

这是疯狂,还是斯巴达?

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 告诉我,我有一个 Integer 的 ArrayList,我希望我应该能够简洁而轻松地执行像上面 3 个查询这样的可爱的小搜索。但没有。

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

Is this madness, or is this Sparta?

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> 

I'm running into a case of "surprised expectations" here. Groovy tells me that I have an ArrayList of Integer, and I expect that I should be able to do cute little searches like the above 3 queries all tersely and sweetly. But no.

  1. What is the idiomatic Groovy way of doing the above (count the number of elements where x != some element)
  2. Why doesn't this work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怎言笑 2024-11-10 11:22:03

方法签名

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)',计算给定值在集合中出现的次数。提供一个闭包实例作为实际参数“值”会导致上述结果。

be aware that the method signature

public Number count(Closure closure)

is supported since Groovy 1.8.0 (current production is 1.7.10) - see http://groovy.codehaus.org/groovy-jdk/java/util/Collection.html#count(groovy.lang.Closure)

Before Groovy 1.8, the code above calls method 'count(Object value)', which counts the number of occurrences of the given value inside the collection. providing a closure instance as actual parameter 'value' leads to the results described above.

后eg是否自 2024-11-10 11:22:03

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

这是一种方法:

def list = [3, 5, 3]

def countElementsNotEqualTo3 = list.findAll{ it != 3 }.size()
assert countElementsNotEqualTo3 == 1

What is the idiomatic Groovy way of doing the above (count the number of elements where x != some element)

Here's one way:

def list = [3, 5, 3]

def countElementsNotEqualTo3 = list.findAll{ it != 3 }.size()
assert countElementsNotEqualTo3 == 1
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文