在 Groovy 中,给集合(主要是 List)添加元素非常灵活,既有类似 Java 的标准方法,也有 Groovy 独有的"语法糖"。
这里有一个非常重要 的区别你需要先知道:Groovy 中有两种添加方式,一种是修改原集合 (原地添加),另一种是创建一个新集合(不可变)。
以下是具体的几种写法:
1. 使用 << 操作符(最常用、最推荐)
这是 Groovy 的标志性写法,叫做"左移操作符",在集合中代表"追加"。它直接修改原集合,性能最好,且支持链式调用。
groovy
def list = [1, 2, 3]
// 添加单个元素
list << 4
println list // [1, 2, 3, 4]
// 链式添加(一口气加多个)
list << 5 << 6
println list // [1, 2, 3, 4, 5, 6]
// 注意:如果用 << 添加另一个列表,它会把那个列表当作"一个整体元素"加进去
list << [7, 8]
println list // [1, 2, 3, 4, 5, 6, [7, 8]] -> 这是一个嵌套列表
2. 使用 += 操作符(智能合并)
+= 看起来和 << 很像,但行为略有不同。它通常用于批量添加。
- 对于 List,它底层调用的是
addAll()。 - 它会将右边的元素"拆开"合并进左边(如果是集合的话)。
groovy
def list = [1, 2, 3]
// 添加单个元素
list += 4
// 添加另一个集合(会将元素拆开合并,而不是嵌套)
list += [5, 6]
println list // [1, 2, 3, 4, 5, 6]
3. 使用 + 操作符(生成新集合)
⚠️ 注意: 使用 + 号不会修改原来的列表 ,而是创建一个包含新元素的新列表。如果你不把它赋值给一个变量,原来的列表不会变。
- 适用场景:函数式编程,或者不想改变原始数据时。
groovy
def list = [1, 2, 3]
// 创建一个新列表,原 list 不变
def newList = list + 4 + [5, 6]
println newList // [1, 2, 3, 4, 5, 6]
println list // [1, 2, 3] -> 原列表没变!
4. 使用 Java 标准方法
作为 Java 开发者,你最熟悉的 add() 和 addAll() 依然完全可用。
groovy
def list = [1, 2, 3]
// 添加单个元素
list.add(4)
// 添加集合
list.addAll([5, 6])
// 在指定位置插入元素 (索引 1 之前插入 9)
list.add(1, 9)
println list // [1, 9, 2, 3, 4, 5, 6]
5. 高级技巧:展开操作符 *.
如果你想把一个列表"拍平"了加到另一个列表里(类似于 Python 的 *args),可以使用展开操作符。
groovy
def parts = [2, 3]
// 将 parts 里的元素拆开,放入新列表
def list = [1, *parts, 4]
println list // [1, 2, 3, 4]
📌 总结对比
| 方式 | 代码示例 | 是否修改原集合 | 特点 |
|---|---|---|---|
<< |
list << 1 |
✅ 是 | 最推荐,速度快,支持链式 |
+= |
list += [1, 2] |
✅ 是 | 适合批量合并,自动解包 |
+ |
list + 1 |
❌ 否 | 返回新集合,原集合不变 |
add() |
list.add(1) |
✅ 是 | 标准 Java 写法,可指定索引 |
建议: 日常开发直接用 << 追加单个元素,用 += 或 addAll 合并集合。