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

相关推荐
星云穿梭8 小时前
用Python写一个带图形界面的学生管理系统——完整教程
python
金銀銅鐵8 小时前
用 Pygame 实现 15 puzzle
python·数学·游戏
唐青枫14 小时前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
黄忠14 小时前
大模型之LangGraph技术体系
python·llm
一个做软件开发的牛马15 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户37215742613515 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户37215742613515 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
hboot1 天前
AI工程师第二课 - 数据处理
人工智能·python·数据分析
用户3521802454751 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
用户8356290780511 天前
使用 Python 自动化 PowerPoint 形状布局与格式设置
后端·python