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

相关推荐
_Jimmy_40 分钟前
Agent 溯源精度提升方案
人工智能·python·langchain
麻瓜老宋1 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十三步,多行输入、进制输出、错误恢复、常量折叠、配置加载等
c语言·开发语言·atomcode
q567315231 小时前
企业级 HTTP 代理采购选型:技术评估清单 15 项
开发语言·网络·爬虫·网络协议·http·隧道ip·代理ip
@航空母舰2 小时前
SpringBoot通过Map实现天然的策略模式
java·spring boot·后端
SamChan902 小时前
在Web应用中集成PDF多语言翻译功能:PDFTranslator API实战指南
前端·python·ai·pdf·yapi·机器翻译
天天进步20152 小时前
Python全栈项目--智能办公自动化系统
开发语言·python
Co_Hui2 小时前
Java 并发编程
java
颜酱2 小时前
09 | 重构项目结构
人工智能·python·langchain
cm04Z9c913 小时前
C#摸鱼实录——IoC与DI案例详解
开发语言·c#
long3163 小时前
Java 新手入门与实战开发指南
java·开发语言