`

Groovy 集合

 
阅读更多

Groovy 集合

在 Groovy 提供的所有方便的快捷方式和功能中,最有帮助的一个可能就是内置的 集合。回想一下在 Java 编程中是如何使用集合的 — 导入 java.util 类,初始化集合,将项加入集合。这三个步骤都会增加不少代码。

而 Groovy 可以直接在语言内使用集合。在 Groovy 中,不需要导入专门的类,也不需要初始化对象。集合是语言本身的本地成员。Groovy 也使集合(或者列表)的操作变得非常容易,为增加和删除项提供了直观的帮助。

可以将范围当作集合

在前一节学习了如何用 Groovy 的范围将循环变得更容易。范围表达式 “0..4” 代表数字的集合— 0、1、2、3 和 4。为了验证这一点,请创建一个新类,将其命名为 Ranger。保留类定义和 main 方法定义。但是这次添加以下代码:

def range = 0..4
println range.class
assert range instanceof List

请注意,assert 命令用来证明范围是 java.util.List 的实例。接着运行这个代码,证实该范围现在是类型 List 的集合。

丰富的支持

Groovy 的集合支持相当丰富,而且美妙之处就在于,在 Groovy 的魔法背后,一切都是标准的 Java 对象。每个 Groovy 集合都是 java.util.Collectionjava.util.Map 的实例。

前面提到过,Groovy 的语法提供了本地列表和映射。例如,请将以下两行代码添加到 Ranger 类中:

def coll = ["Groovy", "Java", "Ruby"]
assert  coll instanceof Collection
assert coll instanceof ArrayList

你将会注意到,coll 对象看起来很像 Java 语言中的数组。实际上,它是一个 Collection。要在普通的 Java 代码中得到集合的相同实例,必须执行以下操作:

Collection<String> coll = new ArrayList<String>();
coll.add("Groovy");
coll.add("Java");
coll.add("Ruby");

在 Java 代码中,必须使用 add() 方法向 ArrayList 实例添加项。

添加项

Groovy 提供了许多方法可以将项添加到列表 — 可以使用 add() 方法(因为底层的集合是一个普通的 ArrayList 类型),但是还有许多快捷方式可以使用。

例如,下面的每一行代码都会向底层集合加入一些项:

coll.add("Python")
coll << "Smalltalk"
coll[5] = "Perl"

请注意,Groovy 支持操作符重载 —<< 操作符被重载,以支持向集合添加项。还可以通过位置参数直接添加项。在这个示例中,由于集合中只有四个项,所以 [5] 操作符将 “Perl” 放在最后。请自行输出这个集合并查看效果。

检索非常轻松

如果需要从集合中得到某个特定项,可以通过像上面那样的位置参数获取项。例如,如果想得到第二个项 “Java”,可以编写下面这样的代码(请记住集合和数组都是从 0 开始):

assert coll[1] == "Java"

Groovy 还允许在集合中增加或去掉集合,如下所示:

def numbers = [1,2,3,4]
assert numbers + 5 == [1,2,3,4,5]
assert numbers - [2,3] == [1,4]

请注意,在上面的代码中, 实际上创建了新的 集合实例,由最后一行可以看出。

魔法方法

Groovy 还为集合添加了其他一些方便的功能。例如,可以在集合实例上调用特殊的方法,如下所示:

def numbers = [1,2,3,4]
assert numbers.join(",") == "1,2,3,4" 
assert [1,2,3,4,3].count(3) == 2

join()count() 只是在任何项列表上都可以调用的众多方便方法中的两个。分布操作符(spread operator) 是个特别方便的工具,使用这个工具不用在集合上迭代,就能够调用集合的每个项上的方法。

假设有一个 String 列表,现在想将列表中的项目全部变成大写,可以编写以下代码:

assert ["JAVA", "GROOVY"] == 
  ["Java", "Groovy"]*.toUpperCase()

请注意 *. 标记。对于以上列表中的每个值,都会调用 toUpperCase(),生成的集合中每个 String 实例都是大写的。

分享到:
评论

相关推荐

    Groovy语法系列教程之集合(六)【完结】.pdf

    本系列教程介绍Groovy编程语言的语法。Groovy的语法源自Java语法,但是通过特定类型对其进行了增强,并允许进行某些简化。

    GETL:基于 Groovy 的 ETL 引擎-开源

    GETL 是一组预先构建的类和对象库,可用于解决解包、转换数据并将数据加载到用 Groovy 或 Java 编写的程序以及从支持 Java 类工作的任何软件中的问题。 GETL在开发思路和以下要求时考虑到: 1.类层次结构越简单,...

    apache-groovy-sdk-2.4.11

    了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合、内置正则表达式和闭包。编写第一个 Groovy 类,然后学习如何使用 JUnit 轻松地进行测试。借助功能完善的 Groovy 开发环境和使用技能,...

    java_groovy_python集合

    姿势需要解锁,不学习怎么会? 老司机开个车,java和groovy都是比较实用的。python用的但是也是可以的

    apache-groovy-sdk-3.0.9.zip

    了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合、内置正则表达式和闭包。编写第一个 Groovy 类,然后学习如何使用 JUnit 轻松地进行测试。借助功能完善的 Groovy 开发环境和使用技能,...

    Groovy学习笔记

    Groovy学习笔记,内容如下: 1.概念 2.基本语法 3.字符串 4.集合 5.类和闭包 6.控制语句 7.操作符重载 8.I/O操作 9.高级应用 10.正则表达式

    [Groovy入门]第三讲.将玩具信息写到集合

    [Groovy入门]第三讲.将玩具信息写到集合

    ROS by example( hydro,groovy,indigo版本集合)

    【打包下载,包含4个版本:Indigo, Groovy , Hydro I, Hydro II,内容超千页】 ROS机器人操作系统,非常强大,包含很多机器人开源代码。这本书适合初学者。涉及到(1)ROS基本概念和编程技术;(2)使用ROS控制...

    groovy学习笔记

    第1章 数字和字符串 第2章 List的简单介绍 第3章 String的特殊用法 第4章 闭包 第5章 集合+闭包 第6章 Map和Range 第7章 函数

    Groovy 教程

    本教程适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java™ 开发人员。了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合、内置正则表达式和闭包。

    groovy-patterns:此存储库将包含来自 - https 的设计模式的常规实现

    Groovy 模式Groovy 中基于的设计模式和习惯用法的集合。 这个 repo 的目的不仅是学习设计模式,还要了解它们在 python 中的实现,这将有助于修改一些 python 并在 groovy 中实现它们,这是我目前的主要开发语言。 ...

    groovy_jvm_talk

    gradle init --type java-library ... 操纵集合 Java互操作 确定要运行的方法:编译时间与运行时 时髦的弦 基准测试-运行时绑定与静态绑定 议程 简介(约翰) 设置上下文。 什么是Groovym趋势(github,google),Tech

    catkinize:将 ROS 堆栈转换为 Catkin 的脚本集合

    柳絮 这是帮助将 ROS 堆栈转换为 Catkin 的脚本集合。安装 sudo python setup.py install例子 # Start by running through the getting started guide at# ...

    helloworld-jsp-3.0.4.zip

    groovy-common-extensions.zip,groovy 2+的扩展集合。

    google-api-services-freebase-v1sandbox-rev46-1.17.0-rc.zip

    groovy-sql-stream-extension.zip,groovy 2+扩展的集合。使用常用的集合方法(如collect、findall等)进行有效的groovy数据集处理。

    java8集合源码分析-java-agent:基于java5Instrumentapi实现的mock框架

    集合源码分析 1 介绍 1.1 用途 单元测试mock 联调、集成测试mock 支持mock静态方法,final方法,私有方法 非常容易实现spring bean的mock 支持对dubbo接口的mock 1.2 原理 java5引入了一个api,叫做Instrument,它...

    java8集合源码-EuropePMCLinks:用于创建欧洲PMC外部链接的代码存储库

    java8集合源码EuropePMCLinks 用于创建 . 这个想法是为我们的路径中引用的文章创建从 Europe PMC 到 WikiPathways 的链接。 链接作为两个 XML 文件的组合提供给 Europe PMC,一个带有配置文件 (),另一个带有链接集...

    Kotlin扩展功能和实用程序的集合。-Android开发

    仓库{jcenter()}然后将Katlib导入Gradle项目,使用:Implementation(“ pw.forst.tools”,“ katlib”,“最新版本”)或与Groovy DSL实现'pw.forst.tools:katlib :some-latest-version'导入Katlib

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    3.3 Groovy的集合 27 3.3.1 列表 27 3.3.2 映射 28 3.3.3 区间 29 3.4 Groovy的闭包 30 3.4.1 闭包的定义 30 3.4.2 闭包的代表 31 3.4.3 闭包在GDK中的使用 31 3.5 本章小结 33 第二篇 实际应用 第4章 商品...

    编程:算法和代码片段的多语言集合

    程式设计 多种算法和代码段的集合。 编程语言 C C# C ++ 迪克图 F# 走 Groovy Java JavaScript PHP Python Ruby Scala SQL

Global site tag (gtag.js) - Google Analytics