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

相关推荐
2601_9622982718 分钟前
Python与Selenium结合的Web自动化测试全流程实践教程
自动化测试·python·selenium·web测试·pageobjectmodel
lzx_00232 分钟前
C++11(一)
开发语言·c++·算法
天衍四九-39 分钟前
第一章:从 LLM 到 Agent —— DeepSeek Harness 入门
网络·数据库·人工智能·python
529宝宝起名网41 分钟前
用 Python 实现名字寓意评分算法:基于 NLP 语义分析的名字内涵深度评估
python·算法·自然语言处理
我是Superman丶1 小时前
Arduino IDE 安装教程:Windows/macOS/Linux 开发环境搭建
ide·windows·macos
2601_962298671 小时前
Python:对象缓存优化机制(CPython)
python·性能优化·内存优化·cpython·对象缓存
未来之窗软件服务1 小时前
计算机二级[英文]-C 字符串移动—东方仙盟
c语言·开发语言·仙盟创梦ide·东方仙盟
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之过滤器与过滤器链
java·开发语言·spring
谢尔登1 小时前
01_Java基础速通
java·开发语言
前端炒粉1 小时前
DOM 常用 API 速查表
开发语言·javascript·ecmascript