Groovy4 为 List 提供了大量强大且简洁的扩展方法,极大地方便了集合操作。其丰富的扩展方法在日常开发中非常实用。
下面是一个表格,汇总了 Groovy4 中常用且强大的 List 扩展方法,并附上了简要说明和示例。
方法类别 | 方法名 | 作用描述 | 简单示例(def list = [1, 2, 3, 4, 5] ) |
---|---|---|---|
遍历与迭代 | each | 遍历每个元素,返回列表本身 | list.each { println it } |
eachWithIndex | 带索引遍历元素 | list.eachWithIndex { item, idx -> println "$idx: $item" } | |
查找与匹配 | find | 返回第一个满足条件的元素 | list.find { it > 3 } // 4 |
findAll | 返回所有满足条件的元素 | list.findAll { it % 2 == 0 } // [2, 4] | |
every | 判断是否所有元素都满足条件 | list.every { it < 10 } // true | |
any | 判断是否存在任一元素满足条件 | list.any { it > 4 } // true | |
转换与加工 | collect | 将列表中的每个元素转换为新值,生成新列表 | list.collect { it * 2 } // [2, 4, 6, 8, 10] |
collectMany | 将每个元素转换的结果集合“扁平化”后返回 | ['a', 'b'].collectMany { [it, it.toUpperCase()] } // ['a', 'A', 'b', 'B'] | |
flatten | 将嵌套列表递归地压平为一维列表 | [1, [2, 3]].flatten() // [1, 2, 3] | |
inject | 迭代并累积结果(类似 reduce) | list.inject(0) { sum, val -> sum + val } // 15 (求和) | |
排序与去重 | sort | 排序(可传入自定义比较器闭包) | [3,1,2].sort() // [1,2,3][3,1,2].sort { a, b -> b <=> a } // [3,2,1] |
unique | 原地移除重复元素,返回去重后的列表本身 | [1,2,3,2,1].unique() // [1,2,3] | |
toUnique | 返回一个新的去重后的列表,原列表不变 | [1,2,3,2,1].toUnique() // [1,2,3] | |
增减与操作 | plus (+) | 列表相加(合并) | [1,2] + [3,4] // [1,2,3,4] |
minus (-) | 列表相减(移除元素) | [1,2,3,4] - [2,4] // [1,3] | |
push | 将元素追加到列表末尾 | list.push(6) // 返回 true, list 变为 [1,2,3,4,5,6] | |
pop | 移除并返回列表最后一个元素 | list.pop() // 返回 5, list 变为 [1,2,3,4] | |
分组与分割 | groupBy | 根据规则分组,返回一个 Map | [1,2,3,4].groupBy { it % 2 } // [0:[2,4], 1:[1,3]] |
split | 根据条件将列表分割为两个子列表的元组 | list.split { it <= 3 } // [[1,2,3], [4,5]] | |
信息获取 | min / max | 查找最小/最大值(可传入条件闭包) | list.min() // 1['ab', 'a'].max { it.size() } // 'ab' |
count | 计算满足条件的元素个数 | list.count { it % 2 == 0 } // 2 | |
sum | 对列表中的所有元素求和 | list.sum() // 15 |
⚠️ 注意事项
- 修改方式:注意区分原地修改(如
unique()
,sort()
)和返回新集合(如toUnique()
,collect()
)的方法,这会影响原列表的值。 - 性能考量:虽然这些语法糖非常方便,但在处理超大规模数据或在性能极端敏感的场景下,需要注意其背后可能产生的开销(如创建中间集合)。有时传统的 for 循环可能更高效5。
- 惰性求值 (Lazy Evaluation) :Groovy 3.0+ 引入了惰性集合操作,如
lazyCollect
,它在你真正需要结果时才会进行计算,有助于优化性能