来自Groovy JDK:
迭代此Object表示的项集合,并使用IDENTITY Closure作为过滤器返回匹配的每个项目 - 有效地返回满足Groovy真值的所有元素.
查找与IDENTITY Closure匹配的所有项目(即匹配Groovy真理).
bla*_*rag 23
简答:结果会是一样的.
答案很长:
 grep通常使用过滤器对象,isCase然后在其上调用.因此grep的参数通常不是Groovy Closure.对于findAll您使用Closure作为参数,并且如果Closure的结果被评估为true,则将其带入生成的集合中.
现在重要的是要知道Closure也有一个isCase方法.Closure#isCase(Object)将使用参数作为Closure的参数执行Closure,然后使用Groovy Truth计算结果.对于身份关闭,即.{it},这意味着闭包将返回给它的内容,因此Groovy将Groovy Truth应用于grep调用的参数.结果与findAll相同.
其实两者还是有细微的差别的。至少在将这些方法与地图一起使用时。
grep返回 a ArrayList,当findAll返回 a 时Map。
下面是一个例子:
def l_map = [a:1, b:2, c:3]
def map_grep = l_map.grep { it.key == 'a' || it.value == 2}
def map_findAll = l_map.findAll { it.key == 'a' || it.value == 2}
println map_grep
println map_findAll
assert l_map instanceof Map
assert map_grep instanceof ArrayList
assert map_findAll instanceof Map
| 归档时间: | 
 | 
| 查看次数: | 3082 次 | 
| 最近记录: |