1、 集合<o:p></o:p>
(1)List (java.util.List)<o:p></o:p>
list = [1, 2, 'hello', new java.util.Date()]<o:p></o:p>
assert list.size() == 4<o:p></o:p>
assert list.get(2) == 'hello'<o:p></o:p>
注意:一切都是对象(数字会自动转换)
(2)Map (java.util.Map)<o:p></o:p>
map = ['name':'James', 'location':'London']<o:p></o:p>
assert map.size() == 2<o:p></o:p>
assert map.get('name') == 'James'<o:p></o:p>
(3)遍历集合<o:p></o:p>
list = [1, 2, 3]<o:p></o:p>
for (i in list) { println i }<o:p></o:p>
<o:p></o:p>
2、 闭包(Closures)
l 闭包类似Java的内类,区别是闭包只有单一的方法可以调用,但可以有任意的参数
closure = { param | println("hello ${param}") }<o:p></o:p>
closure.call("world!")<o:p></o:p>
<o:p></o:p>
closure = { greeting, name | println(greeting + name) }<o:p></o:p>
closure.call("hello ", "world!")<o:p></o:p>
l 闭包用“{}”括起,“|”前面是参数,后面是处理语句,使用call调用
l 第一个例子演示了在字符串内使用参数的形式:${param}
l 第二个例子演示了多参数形式:用“,”分隔参数
l 如果只有一个参数,可以不写,而使用缺省的参数“it”,如下面的例子:
closure = { println "hello " + it }<o:p></o:p>
closure.call("world!")<o:p></o:p>
<o:p></o:p>
3、 each<o:p></o:p>
l 遍历集合,逐个传递给闭包
[1, 2, 3].each { item | print "${item}-" }<o:p></o:p>
l 上面例子的输出结果是:1-2-3-
<o:p></o:p>
4、 collect<o:p></o:p>
l 遍历集合,逐个传递给闭包,处理后的结果返回给对应的项
value = [1, 2, 3].collect { it * 2 }<o:p></o:p>
assert value == [2, 4, 6]<o:p></o:p>
<o:p></o:p>
5、 find<o:p></o:p>
l 根据闭包断言,返回集合中找到的第一个项目
value = [1, 2, 3].find { it > 1 }<o:p></o:p>
assert value == 2<o:p></o:p>
<o:p></o:p>
6、 findAll<o:p></o:p>
l 根据闭包断言,返回集合中所有找到的项目
value = [1, 2, 3].findAll { it > 1 }<o:p></o:p>
assert value == [2, 3]<o:p></o:p>
<o:p></o:p>
7、 inject<o:p></o:p>
l 遍历集合,第一次将传递的值和集合项目传给闭包,将处理结果作为传递的值,和下一个集合项目传给闭包,依此类推
value = [1, 2, 3].inject('counting: ') { str, item | str + item }<o:p></o:p>
assert value == "counting: 123"<o:p></o:p>
<o:p></o:p>
value = [1, 2, 3].inject(0) { count, item | count + item }<o:p></o:p>
assert value == 6<o:p></o:p>
<o:p></o:p>
8、 every<o:p></o:p>
l 如果集合中所有项目都匹配闭包断言,就返回true,否则返回false
value = [1, 2, 3].every { it < 5 }<o:p></o:p>
assert value<o:p></o:p>
<o:p></o:p>
value = [1, 2, 3].every { item | item < 3 }<o:p></o:p>
assert ! value<o:p></o:p>
<o:p></o:p>
9、 any<o:p></o:p>
l 如果集合中任何项目匹配闭包断言,就返回true,否则返回false
value = [1, 2, 3].any { it > 2 }<o:p></o:p>
assert value<o:p></o:p>
<o:p></o:p>
value = [1, 2, 3].any { item | item > 3 }<o:p></o:p>
assert value == false<o:p></o:p>
<o:p></o:p>
10、 min/max<o:p></o:p>
l 返回集合中的最小/最大项目(对象必须可比较)
value = [9, 4, 2, 10, 5].max()<o:p></o:p>
assert value == 10<o:p></o:p>
value = [9, 4, 2, 10, 5].min()<o:p></o:p>
assert value == 2<o:p></o:p>
value = ['x', 'y', 'a', 'z'].min()<o:p></o:p>
assert value == 'a'<o:p></o:p>
<o:p></o:p>
11、 join<o:p></o:p>
l 连接集合中的值成一个字符串
value = [1, 2, 3].join('-')<o:p></o:p>
assert value == '1-2-3'<o:p></o:p>
<o:p></o:p>
12、 yield<o:p></o:p>
l 在Python和Ruby中通过yield语句创建“yield”风格的iterators,在Groovy同样有效,只是使用的是闭包
class Foo{<o:p></o:p>
<o:p></o:p>
static void main(args) {<o:p></o:p>
foo = new Foo()<o:p></o:p>
for (x in foo.myGenerator) {<o:p></o:p>
print("${x}-")<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
<o:p></o:p>
myGenerator(Closure yield) {<o:p></o:p>
yield.call("A")<o:p></o:p>
yield.call("B")<o:p></o:p>
yield.call("C")<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
l 例子的输出结果是:A-B-C-
l Cloures原型可以省略,call和括号同样可选,这样更象Python/Ruby
class Foo {<o:p></o:p>
myGenerator(yield) {<o:p></o:p>
yield "A"<o:p></o:p>
yield "B"<o:p></o:p>
yield "C" <o:p></o:p>
}<o:p></o:p>
<o:p></o:p>
static void main(args) {<o:p></o:p>
foo = new Foo()<o:p></o:p>
foo.myGenerator { println "Called with ${it}" }<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=104971
相关推荐
Groovy快速入门.pptx于Groovy的传说有很多,最近也越来越热,有人甚至说Groovy 是 JVM 的一个替代语言。我列几点特性,大家自己判断:是一个基于Java虚拟机的敏捷动态语言。它构建在强大的Java语言之上并添加了从...
### Groovy 快速入门指南知识点详解 #### 一、集合操作 Groovy 提供了对集合的强大支持,包括 `List` 和 `Map` 的多种操作方式。 **1. List** - **定义与访问** - Groovy 中的 `List` 可以包含不同类型的元素。...
在《Groovy快速入门》中,你将接触到: 1. **基础语法**:Groovy的基础数据类型、变量声明、控制流语句(如if、for、while)、函数和类的定义。 2. **动态特性**:Groovy的动态类型系统,以及运行时类型检查和类型...
### Groovy 快速入门知识点详解 #### 一、Groovy基础语法介绍 Groovy是一种灵活的编程语言,运行在Java平台上,具有简洁且强大的特性。Groovy支持面向对象编程和函数式编程,并且能够与Java无缝集成。下面将详细...
在本文中,我们将深入探讨Groovy的基础知识,包括语法特性、面向对象编程、脚本使用以及与其他Java技术的集成,以帮助初学者快速入门。 1. **Groovy语法简介** - Groovy的语法简洁且易于理解,它融合了多种语言的...
Groovy_in_Action.pdf Groovy经典入门.pdf 使用Grails快速开发Web应用.pdf 在Eclipse里使用Grails类创建工具.pdf Programming Groovy. Dynamic Productivity for the Java Developer.pdf等一系列groovy资源
### Grails快速入门知识点详解 ...以上是关于Groovy快速入门的一些基础知识和特性介绍,希望对初学者有所帮助。通过掌握这些基本概念,开发者可以更快地上手Groovy编程,并逐步探索更多高级特性。
Groovy入门经典是一个唯一能够扩展Java平台的脚本语言,内容全面详尽,浅显易懂,易于选择性阅读。可以作为对Groovy语言感兴趣的计算机软件开发人员的参考书。需要的朋友们就赶紧来下载试试吧! Groovy提供类似...
本文将深入探讨如何轻松入门Groovy,搭建Groovy的开发环境。 1. **安装Java开发环境**: 在开始Groovy开发之前,首先确保你的系统已经安装了Java Development Kit (JDK)。Groovy是基于Java的,因此需要JDK来运行和...
语言程序设计资料:Groovy_快速入门.doc
通过学习上述知识点,你可以快速入门Groovy,理解其核心特性,并开始编写Groovy代码。《Groovy经典入门》这本书可能包含了这些主题的详细讲解,帮助你深入理解这门语言,进一步提升编程技能。在学习过程中,遇到问题...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个扩展,可以无缝集成到Java项目中。...通过阅读《Groovy经典入门》这本书和实践其中的示例,你可以快速掌握Groovy语言并开始利用其强大的功能。
文档中的"Groovy快速入门"部分涵盖了以下几个关键知识点: - **集合**:Groovy支持Java的集合类型,如List和Map。List类型类似于数组,可以存储有序的元素列表;Map类型用于存储键值对,提供了灵活的数据结构。...
此外,Groovy在Web开发领域也有广泛的应用,如Grails框架,它是一个基于Spring Boot的全栈框架,用于快速开发Web应用。书中可能涵盖Grails的基础知识,包括控制器、服务、视图和域对象,以及MVC模式的应用。 ...
Groovy与Java语法相似,但更为简洁,减少了程序员的编码工作量,尤其适合快速开发和脚本编写。 在开发环境中,Groovy的起步要求包括JDK 1.5或更高版本。对于IDE,Eclipse是常见的选择,可以通过安装Groovy插件来...
Groovy是一种基于Java平台的动态、灵活...综上所述,“Groovy轻松入门—Grails实战基础篇”将带你走进Groovy和Grails的世界,通过深入学习这些知识点,你可以快速掌握这个强大的开发工具,从而高效地构建现代Web应用。
《Groovy入门经典》奉书内容全面详尽,浅显易懂,易于选择性阅读。可以作为对Groovy语言感兴趣的计算机软件开发人员的参考书。.., Groovy是唯一能够扩展Java平台的脚本语言。Groovy提供类似于Java的语法结构,本地化...
#### 一、Groovy简介与快速入门 **1.1 使用Groovy** Groovy是一种灵活的面向对象编程语言,它与Java有着良好的兼容性,允许开发者以简洁而强大的方式编写代码。对于那些急于开始编写Groovy代码的新手来说,首先...