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

相关推荐
神仙别闹6 小时前
基于C语言 实现 Windows PE 文件解析
c语言·windows·microsoft
kebeiovo6 小时前
Codex在Windows安装配置指南
windows
星梦清河6 小时前
Java—异步编程
java·开发语言
GIS数据转换器6 小时前
智慧能源管理平台
java·大数据·运维·人工智能·无人机
daad7776 小时前
wsl2上的 gz sim 安装 gazebo
windows
garmin Chen6 小时前
LeetcodeHot100打卡(14、合并空间,15、轮转数组,16、除了自身以外数组乘积,17.缺失的第一个整数)
java·笔记·学习·算法
接着奏乐接着舞6 小时前
dto 转entity方法
java·开发语言
我命由我123456 小时前
Android 开发问题:项目同时引入了两个包含相同类文件的库(AndroidX 库、旧版本支持库),导致了重复类错误
android·java·java-ee·android studio·android-studio·androidx·android runtime
0x00076 小时前
译 Anders Hejlsberg 谈 C# 与 .NET
开发语言·c#·.net
梓色系6 小时前
Spring AI 实战:从零搭建 MCP 客户端与服务端,让大模型拥有“手脚“
java·人工智能·spring