`

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 实例都是大写的。

分享到:
评论

相关推荐

    java_groovy_python集合

    2. **Groovy集合**:Groovy作为JVM上的动态语言,其集合操作与Java类似但更为简洁。Groovy支持List、Set、Map等,且提供了许多便利的语法糖,如使用下标操作符[]来获取和设置元素,以及使用闭包进行集合操作,使代码...

    groovy-xml-2.2.0-beta-1.zip

    Groovy的XML支持是其一大亮点,它提供了一种简洁的语法来操作XML,使得XML处理变得像操作普通的Groovy集合一样简单。例如,通过Groovy的GPath表达式,开发者可以直接使用类似CSS选择器的方式来获取XML节点。此外,...

    The Groovy 2 Tutorial(LeanPub)

    12. **集合**:Groovy集合包括列表(Lists)和映射(Maps)。集合是存储和操作一组数据的对象。教程中可能会涉及到创建和操作集合的方法。 13. **数组**:数组是同一种数据类型的集合。在Groovy中,数组提供了许多...

    Java调用Groovy,实时动态加载数据库groovy脚本

    例如,我们可能会有一个MongoDB集合,其中每个文档包含一个字段存储Groovy脚本。Java代码会连接到MongoDB,找到这个文档,读取Groovy脚本,然后使用GroovyClassLoader进行加载和执行。 动态加载数据库中的Groovy...

    groovy in action 中文版 2017.11

    这些集合类型在Groovy中得到了极大的扩展和简化,例如使用操作符来添加元素或遍历集合。闭包(closures)是Groovy中非常重要的一个概念,闭包是一种可以作为参数传递、可以从其被定义的作用域外调用的代码块。Groovy...

    groovy速查手册

    Groovy支持多种集合数据类型,如列表(List)、映射(Map)等,这些数据类型的使用方式与Java相似,但Groovy提供了更多的语法糖,使得代码更加简洁易读。 #### 六、元编程 Groovy强大的元编程特性使得开发者能够...

    groovy-all-2.4.8.jar

    Groovy All-2.4.8.jar 是一个包含Groovy库的集合包,主要用于简化Groovy环境的搭建和使用。这个版本(2.4.8)是Groovy在2.x系列中的一个稳定发行版,提供了一系列的功能和性能改进。 1. **Groovy简介** - Groovy是...

    apache-groovy-sdk-4.0.1下载

    1. **groovy-all.jar**:这是一个包含了Groovy库所有模块的集合,你可以通过引入这个单一的jar文件来快速地在项目中使用Groovy。 2. **bin**目录:包含了一系列可执行脚本,如`groovy`, `groovyc`, 和 `groovysh`,...

    apache-groovy-sdk-3.0.6.zip

    5. **Groovy类库**:Groovy标准库提供了一系列的类和模块,涵盖了集合操作、元编程、XML处理、网络I/O等多个领域,这些类库极大地丰富了Groovy的内置功能。 6. **Gradle集成**:由于Groovy是Gradle的默认脚本语言,...

    Groovy-JSON-Parser

    它可以接收任何Groovy集合(如Map或List)并生成对应的JSON文本: ```groovy def data = [name: 'John', age: 30, city: 'New York'] def jsonString = new JsonBuilder(data).toPrettyString() println json...

    groovy+in+action

    - **集合操作**:Groovy提供了丰富的集合操作方法,如filter、find、sort等,使得集合处理变得更加简单。 **4. 闭包** - **定义**:闭包是Groovy中最强大的特性之一,它是一种可以访问其外部作用域变量的匿名...

    Z2-Groovy in Action.pdf

    Groovy的集合类型包括List、Map和Range等,这些类型在Groovy中被扩展以支持更多的操作。例如,List在Groovy中可以像Python一样使用负索引,Range则可以通过简单的范围表达式生成序列。这些集合类型在Groovy中都是...

    实战groovy.rar

    3. 集合与闭包:熟悉Groovy的List、Map等集合操作,以及强大的闭包特性。 4. 文件I/O和网络编程:学习如何使用Groovy进行文件操作和网络通信。 5. 测试与调试:掌握Spock测试框架,进行单元测试和集成测试。 6. 深入...

Global site tag (gtag.js) - Google Analytics