一、方法侧重点
- collect 侧重遍历,可以理解为for循环
- findAll 侧重过滤,可以理解为filter
二、调用方式
- List.collect{这里可以对每个元素做处理}, 返回处理过的新List
- List.findAll{ it.age > 10}, it是单个元素,可以对属性做判断, 返回过滤后的新List
- findAll 也可以通过return进行过滤
Map m1 = [age:1,name:"a"]
Map m2 = [age:2,name:"b"]
Map m3 = [age:3,name:"c"]
Map m4 = [age:4,name:"d"]
List list = [m1,m2,m3,m4]
List listNew = list.findAll{
if(it.age){
if(it.age > 2){
it.name = it.name+"ok"
return it// 也可以return true,只要返回能区分开就行,groovy很宽松
}
}
}
println listNew
三、注意collect中使用return,可能包含null元素
- collect闭包中也可以写return ,但如果有条件判断,返回的List可能包含null
- 注意一点,collect方法返回的元素数量不变
- 可以使用.grep()去掉null,元素,但这样,不如直接使用findAll