来自Groovy JDK:
迭代此Object表示的项集合,并使用IDENTITY Closure作为过滤器返回匹配的每个项目 - 有效地返回满足Groovy真值的所有元素。
查找与IDENTITY Closure匹配的所有项目(即匹配Groovy真理)。
答案 0 :(得分: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相同。
答案 1 :(得分:3)
实际上两者之间存在细微差别。 至少在将这些方法与地图一起使用时。
当grep
返回ArrayList
时, findAll
会返回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