`

Groovy快速入门

阅读更多

1、                集合<o:p></o:p>

1List (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>

注意:一切都是对象(数字会自动转换)

2Map (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         PythonRuby中通过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快速入门指南(中文)

    groovy快速入门指南(中文),想了解groovy的朋友可以下载看看

    Gails入门指南(中文) + Groovy快速入门(中文)

    Gails入门指南.pdf Groovy快速入门.doc

    Groovy_快速入门

    Groovy_快速入门,对于初学groovy的很有帮助,值得学习

    Groovy_in_Action Groovy经典入门 使用Grails快速开发Web应用

    Groovy_in_Action.pdf Groovy经典入门.pdf 使用Grails快速开发Web应用.pdf 在Eclipse里使用Grails类创建工具.pdf Programming Groovy. Dynamic Productivity for the Java Developer.pdf等一系列groovy资源

    Groovy入门经典.pdf

    Groovy入门经典是一个唯一能够扩展Java平台的脚本语言,内容全面详尽,浅显易懂,易于选择性阅读。可以作为对Groovy语言感兴趣的计算机软件开发人员的参考书。需要的朋友们就赶紧来下载试试吧!  Groovy提供类似...

    语言程序设计资料:Groovy_快速入门.doc

    语言程序设计资料:Groovy_快速入门.doc

    Groovy入门经典

    《Groovy入门经典》奉书内容全面详尽,浅显易懂,易于选择性阅读。可以作为对Groovy语言感兴趣的计算机软件开发人员的参考书。.., Groovy是唯一能够扩展Java平台的脚本语言。Groovy提供类似于Java的语法结构,本地化...

    Groovy_快速入门.doc

    groovy 基础语法介绍

    groovy入门实例代码详细(包括字符串,map,闭包等等)

    这个代码包是老师上课给我们的,感觉对于初学者来说非常实用,里面包含了基本语法,包括字符串,整数,小数,数组,闭包等待,让你快速入门

    Groovy In A Nutshell

    Groovy入门,国内程序员2008年10月原创资料,书中例子短小精悍,简单易懂,快速展示Groovy的一些诱人特性。不过最后几个章节有点为自己公司打广告的意思。

    Grails入门指南 中文版

    Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,从而为大家带来一套能实现超高生产力的一站式框架。 本书作者 Jason Rudolph 译者 陈俊 林...

    Grails入门指南-中文版

    Grails框架的代码贡献人Jason Rudolph为您带来这一用于快速Web开发的开源框架的介绍。该框架基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,从而使之成为一套能带来超高生产力的一站式框架...

    initializr:Spring项目的快速入门生成器

    SpringInitializr Spring Initializr提供了一个可扩展的API来生成基于JVM的项目,并带有几种常见概念的实现: Java,Kotlin和Groovy的基本语言生成。 使用Apache Maven和Gradle的实现构建系统抽象。 .gitignore支持...

    python入门开发经典书籍

    包含《python基础教程》、《A Byte of Python》、《Head First Python》3本python经典入门书籍,方便快速的进行python编程学习

    ofbiz资料大全

    OFBiz开发快速入门.rar OFBiz-技术文档.rar OFBiz API中文版.rar Apache OFBiz Cookbook Sep 2010.rar Opentaps widget使用说明.rar OFBiz.Development.2008.rar Groovy中文教程.rar freemarker中文手册.rar ...

    云盘es 下载从入门到精通

    Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elastic...

    Grails入门指南 gswg_source

    Grails是一套用于快速开发Web应用系统的框架,基于Groovy动态语言。并构建在开源技术如:Spring,Hibernate和SiteMesh之上。

    java开源包7

    AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器...

    faceid:如何使用 Apache TomEE 构建“用户管理”应用程序。 [ExtJS 4、Lint、Jasmine、Groovy]

    快速入门【单机应用】 您可以按照以下简单步骤运行该应用程序。 签出此源代码 转到应用程序的根目录并运行mvn clean install tomee:run 打开 快速入门【解决方法】 此应用程序是 photodb/faceid/msglnk 解决方案...

Global site tag (gtag.js) - Google Analytics