在 Groovy 提供的所有方便的快捷方式和功能中,最有帮助的一个可能就是内置的 集合。回想一下在 Java 编程中是如何使用集合的 — 导入 java.util
类,初始化集合,将项加入集合。这三个步骤都会增加不少代码。
而 Groovy 可以直接在语言内使用集合。在 Groovy 中,不需要导入专门的类,也不需要初始化对象。集合是语言本身的本地成员。Groovy 也使集合(或者列表)的操作变得非常容易,为增加和删除项提供了直观的帮助。
可以将范围当作集合
在前一节学习了如何用 Groovy 的范围将循环变得更容易。范围表达式 “0..4
” 代表数字的集合 — 0、1、2、3 和 4。为了验证这一点,请创建一个新类,将其命名为 Ranger
。保留类定义和 main
方法定义。但是这次添加以下代码:
def range = 0..4 |
请注意,assert
命令用来证明范围是 java.util.List
的实例。接着运行这个代码,证实该范围现在是类型 List
的集合。
丰富的支持
Groovy 的集合支持相当丰富,而且美妙之处就在于,在 Groovy 的魔法背后,一切都是标准的 Java 对象。每个 Groovy 集合都是 java.util.Collection
或 java.util.Map
的实例。
前面提到过,Groovy 的语法提供了本地列表和映射。例如,请将以下两行代码添加到 Ranger
类中:
def coll = ["Groovy", "Java", "Ruby"] |
你将会注意到,coll
对象看起来很像 Java 语言中的数组。实际上,它是一个 Collection
。要在普通的 Java 代码中得到集合的相同实例,必须执行以下操作:
Collection<String> coll = new ArrayList<String>(); |
在 Java 代码中,必须使用 add()
方法向 ArrayList
实例添加项。
添加项
Groovy 提供了许多方法可以将项添加到列表 — 可以使用 add()
方法(因为底层的集合是一个普通的 ArrayList
类型),但是还有许多快捷方式可以使用。
例如,下面的每一行代码都会向底层集合加入一些项:
coll.add("Python") |
请注意,Groovy 支持操作符重载 — <<
操作符被重载,以支持向集合添加项。还可以通过位置参数直接添加项。在这个示例中,由于集合中只有四个项,所以 [5]
操作符将 “Perl” 放在最后。请自行输出这个集合并查看效果。
检索非常轻松
如果需要从集合中得到某个特定项,可以通过像上面那样的位置参数获取项。例如,如果想得到第二个项 “Java”,可以编写下面这样的代码(请记住集合和数组都是从 0 开始):
assert coll[1] == "Java" |
Groovy 还允许在集合中增加或去掉集合,如下所示:
def numbers = [1,2,3,4] |
请注意,在上面的代码中, 实际上创建了新的 集合实例,由最后一行可以看出。
魔法方法
Groovy 还为集合添加了其他一些方便的功能。例如,可以在集合实例上调用特殊的方法,如下所示:
def numbers = [1,2,3,4] |
join()
和 count()
只是在任何项列表上都可以调用的众多方便方法中的两个。分布操作符(spread operator) 是个特别方便的工具,使用这个工具不用在集合上迭代,就能够调用集合的每个项上的方法。
假设有一个 String
列表,现在想将列表中的项目全部变成大写,可以编写以下代码:
assert ["JAVA", "GROOVY"] == |
请注意 *.
标记。对于以上列表中的每个值,都会调用 toUpperCase()
,生成的集合中每个 String
实例都是大写的。