Groovy 如何给集合中添加元素

在 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 合并集合。

相关推荐
Nontee几秒前
Quartz 新手入门:定时任务的两个承诺
开发语言·windows·python
Hpc_Fun几秒前
GPU 工作站品牌怎么比?五把可核验尺子、加权评分脚本与场景重排
java·信创·gpu工作站·品牌对比·加权评分
const_qiu1 分钟前
第四章 03:4.3 Tools —— 让 Agent 会用工具
java·人工智能
Rain的Java大神之路7 分钟前
百万并发直播弹幕系统设计全解:看懂了扇出,你就看懂了高并发的八成
java·后端·面试
weixin_4379619214 分钟前
Docker安装(windows)
windows·docker·容器
wewowilling14 分钟前
LangChain入门
python·ai·langchain·prompt
\光辉岁月/23 分钟前
2.异常类
java·开发语言·异常类
淡海水24 分钟前
05-03-源码-Boehm GC分配与碎片管理
开发语言·算法·unity·c#·游戏引擎·gc
kyle~26 分钟前
Windows 多 AP 同名 Wi-Fi 网络异常问题复盘
网络·windows
努力实干26 分钟前
C++ 面向对象与工程架构
开发语言·c++·架构