Open Java Project

Keep it simple, Stupid, Less is more

原创 Groovy快速入门收藏

1、                集合

1List (java.util.List)

list = [1, 2, 'hello', new java.util.Date()]
assert list.size() == 4
assert list.get(2) == 'hello'

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

2Map (java.util.Map)

map = ['name':'James', 'location':'London']
assert map.size() == 2
assert map.get('name') == 'James'

3)遍历集合

list = [1, 2, 3]
for (i in list) { println i }

 

2、  闭包(Closures

l         闭包类似Java的内类,区别是闭包只有单一的方法可以调用,但可以有任意的参数

closure = { param | println("hello ${param}") }
closure.call("world!")
 
closure = { greeting, name | println(greeting + name) }
closure.call("hello ", "world!")

l         闭包用“{}”括起,“|”前面是参数,后面是处理语句,使用call调用

l         第一个例子演示了在字符串内使用参数的形式:${param}

l         第二个例子演示了多参数形式:用“,”分隔参数

l         如果只有一个参数,可以不写,而使用缺省的参数“it”,如下面的例子:

closure = { println "hello " + it }
closure.call("world!")

 

3、 each

l         遍历集合,逐个传递给闭包

[1, 2, 3].each { item | print "${item}-" }

l         上面例子的输出结果是:1-2-3-

 

4、 collect

l         遍历集合,逐个传递给闭包,处理后的结果返回给对应的项

value = [1, 2, 3].collect { it * 2 }
assert value == [2, 4, 6]

 

5、 find

l         根据闭包断言,返回集合中找到的第一个项目

value = [1, 2, 3].find { it > 1 }
assert value == 2

 

6、 findAll

l         根据闭包断言,返回集合中所有找到的项目

value = [1, 2, 3].findAll { it > 1 }
assert value == [2, 3]

 

7、 inject

l         遍历集合,第一次将传递的值和集合项目传给闭包,将处理结果作为传递的值,和下一个集合项目传给闭包,依此类推

value = [1, 2, 3].inject('counting: ') { str, item | str + item }
assert value == "counting: 123"
 
value = [1, 2, 3].inject(0) { count, item | count + item }
assert value == 6

 

8、 every

l         如果集合中所有项目都匹配闭包断言,就返回true,否则返回false

value = [1, 2, 3].every { it < 5 }
assert value
 
value = [1, 2, 3].every { item | item < 3 }
assert ! value

 

9、 any

l         如果集合中任何项目匹配闭包断言,就返回true,否则返回false

value = [1, 2, 3].any { it > 2 }
assert value
 
value = [1, 2, 3].any { item | item > 3 }
assert value == false

 

10、              min/max

l         返回集合中的最小/最大项目(对象必须可比较)

value = [9, 4, 2, 10, 5].max()
assert value == 10
value = [9, 4, 2, 10, 5].min()
assert value == 2
value = ['x', 'y', 'a', 'z'].min()
assert value == 'a'

 

11、              join

l         连接集合中的值成一个字符串

value = [1, 2, 3].join('-')
assert value == '1-2-3'

 

12、              yield

l         PythonRuby中通过yield语句创建“yield”风格的iterators,在Groovy同样有效,只是使用的是闭包

class Foo{
 
       static void main(args) {
              foo = new Foo()
              for (x in foo.myGenerator) {
                print("${x}-")
              }
       }
 
       myGenerator(Closure yield) {
              yield.call("A")
              yield.call("B")
              yield.call("C")
       }
}

l         例子的输出结果是:A-B-C-

l         Cloures原型可以省略,call和括号同样可选,这样更象Python/Ruby

class Foo {
       myGenerator(yield) {
              yield "A"
              yield "B"
              yield "C" 
       }
 
       static void main(args) {
              foo = new Foo()
              foo.myGenerator { println "Called with ${it}" }
       }
}

发表于 @ 2004年09月15日 09:33:00|评论(loading...)

新一篇: Groovy用户指南(1) | 旧一篇: 使用Groovy IDE插件

用户操作
[即时聊天] [发私信] [加为好友]
nelson_tu
订阅我的博客
XML聚合  FeedSky
nelson_tu的公告


自从2005年04月05日
(061800)

Dynamic Script Language
DOTNET2_BEGINNER

文章分类
收藏
AJAX
Ajax.NET(RSS)
AjaxFaces(RSS)
Ajaxian(RSS)
BACKBASE(RSS)
DWR(RSS)
Prototype(RSS)
SAJAX(php/perl/python)(RSS)
AOP&AspectJ
AspectWerkz(RSS)
eBook&Articles
Codehaus Docs(RSS)
CodeZoo(RSS)
FlazX(RSS)
huihoo(灰狐)(RSS)
IBM developerWorks(RSS)
ITPUB论坛(RSS)
java.net articles(RSS)
Onjava.com(RSS)
TheServerSide(RSS)
中国E书网(RSS)
Eclipse
Eclipse Article(RSS)
Eclipse.org(RSS)
Plugins(RSS)
中国Eclipse社区(RSS)
Groovy
Groovy开源项目(RSS)
Just Groovy(RSS)
J2EE Framework
Apache Geronimo(RSS)
Avalon Project(RSS)
Spring(RSS)
Spring 中文论坛(RSS)
Open Project
ActiveMQ(RSS)
QDox(RSS)
Open Source
Apache Project(RSS)
Caucho(RSS)
Codehaus.org(RSS)
dev2dev(RSS)
Exadel(RSS)
JBoss(RSS)
Jetty(RSS)
Sourceforge.net(RSS)
ORM&DAO
Cayenne(RSS)
Hibernate.org(RSS)
Hibernate中文网(RSS)
iBATIS(RSS)
PDF
iText(RSS)
Template Engine
Freemarker(RSS)
Velocity Project(RSS)
Xkins(RSS)
Web MVC Framework
Aurora MVC(RSS)
OpenSymphony(RSS)
Wicket Project(RSS)
其它
上海城市交通(RSS)
西安信息资源网(RSS)
友情blog
Craig's stack trace(RSS)
HongSoft 动力(RSS)
Ken Egervari(RSS)
Open Java Project (BlogJava)(RSS)
一地鸡毛(RSS)
图图日记(RSS)
星月夜(RSS)
邢红瑞的blog(RSS)
存档
软件项目交易
Csdn Blog version 3.1a
Copyright © nelson_tu