文档章节

Groovy探索 使用集合方法,写出更加Groovy风格的代码

654806222
 654806222
发布于 2014/09/17 09:27
字数 1046
阅读 33
收藏 0

Groovy探索 使用集合方法,写出更加Groovy风格的代码

使用了Groovy语言,就能时不时的感受到Groovy语言在编码风格上与Java语言的不同。当然,我们首先感受到的可能就是在Groovy语言中无处不在的闭包,其中最最常用的是each方法。

比如,下面的代码段是我们在Java语言中常用的遍历风格:

for(int i=0;i<list.size();i++)

{

System.out.println(list.get(i));

}

但是,我们在Groovy语言中常用的遍历风格却是如下的代码段:

list.each{

println it

}

这种风格,已经让我强烈感受到了Groovy语言编码的快捷性。但是,我们,对于长期使用Java语言的我们来说,Groovy语言在许许多多的地方表现出它的风格,但我们由于使用Java语言的惯性,未必能很自然的使用它们。

比如,我们有如下的一个集合对象:

def list = [1,2,3,4]

现在,我们需要得到一个集合对象,它的每一个元素是上面的list对象的每一个元素的两倍。我们从Java语言过来的人很容易写出如下的代码来:

def result = []

list.each{

result << it*2

}

我们可能会洋洋自得,我们的each方法使用的不错,代码比起Java语言来简单得多了。但实际上,Groovy语言为我们准备了更加简单的方法,这就是Groovy语言风格的集合方法--collect方法。

def result = list.collect{it*2}

可以看到,只有一个语句行,就代替了上面的三个语句行。这就是我们Groovy风格的代码,同样的方法还有"collect(Collection collection, Closure closure)","collectAll(Closure closure)"和"collectAll(Collection collection, Closure closure)"。

还是上面的list对象,比如,我们想找出该对象中所有大于2的元素来,我们的Java语言风格应该是这样的:

def result = []

list.each{

if(it>2)

result << it

}

println result

但是,这种过滤,在Groovy语言中,同样可以找到集合方法来代替它,使得代码更加具有Groovy语言风格:

def result = list.grep{

it > 2

}

println result

是的,在Groovy语言中,我们对集合元素的过滤一般都使用"grep"方法,这样的代码更加具有Groovy风格一些。具有同样一些功能的方法还有"find(Closure closure)","findAll(Closure closure)"。

在Java语言中,对List的遍历方法是万能的,我们要做的一切功能都必须从遍历方法开始。比如,我们想知道上面的list对象是否所有的元素都大于0。在Java语言中,我们会写出如下的代码:

boolean isMoreThanZero = true;

for(int i in list)

{

if(i<=0)

{

isMoreThanZero = false;

break;

}

}

println isMoreThanZero

在Groovy语言中,同样有Groovy风格的方法来帮我们省掉一大段的代码,这就是"every"方法:

def isMoreThanZero = list.every{

it>0

}

println isMoreThanZero

同样类型的方法还有"any(Closure closure)","any()"和"every()"。

除了上面的一些Groovy风格的代码,我们还有难度更大一些的Groovy语言风格的方法,比如注入方法--"inject"。

比如,我们想把list对象的所有元素相加起来,然后再和10求和。Java语言的编码风格看起来如下:

def count = 10

list.each{

count+=it

}

println count

但Groovy语言风格的代码看起来如下所示:

def count = list.inject(10){result,it->

result+it

};

println count

类似这样的注入方法,Groovy语言还有集合方法"count(Object value)"。

还有一个集合方法,对于字符串特别好用。比如,我们想把上面的list对象的所有元素连接成一个字符串。Java语言的风格是这样的:

def result = ''

list.each{

result+=it

}

println result

Groovy语言风格的代码则是如下:

def result = list.join()

println result

好了,就举出这么多了,都是一些集合方法配合闭包来使用而形成的Groovy语言风格的代码,写起来既快捷又简约,体现出Groovy语言作为动态语言的特点来。


本文转载自:http://blog.csdn.net/hivon/article/details/3996722

上一篇: groovy学习笔记
下一篇: groovy学习笔记
654806222
粉丝 0
博文 2
码字总数 0
作品 0
长沙
私信 提问
Groove list操作-转数组,collect,each等

list转换为数组 List list = ['a','b','c','d']def strs = list as String[]println strs[0] 使用了Groovy语言,就能时不时的感受到Groovy语言在编码风格上与Java语言的不同。当然,我们首先......

SuShine
2018/08/31
56
0
为 Java 开发者解读 Groovy 编程风格和语言特性

当一个Java开发人员加入到Groovy的开发之旅的时候,他/她经常带着Java思想去思考,并逐步地学习Groovy,每次学习一个特性,这会让他慢慢变得更有创造性和写出更符合语言习惯的Groovy代码。这...

oschina
2013/01/14
6.1K
18
Gradle从入门到实战 - Groovy基础

前言 Android方向的第一期文章,会专注于Gradle系列,名字叫做『 Gradle从入门到实战』,计划有如下几个课程: Groovy基础 全面理解Gradle 如何创建Gradle插件 分析Android的build tools插件...

亭子happy
2018/06/13
0
0
掌握多种语言是我的财富 —— 来自《高效程序员的45个习惯》作者

Venkat Subramaniam 博士是 Agile Developer 公司创始人,Jolt 图书大奖获奖作者,现在休斯敦大学计算机系兼职任教。作为敏捷开发方面的权威人士,他培训并指导了美国、加拿大、印度和欧洲多...

oschina
2014/12/24
8.2K
16
Jenkins工程中SQL语句执行的方法

前言 网上很多jenkins工程中基于shell或批处理方式调用sql文件执行sql命令的方式,大部分都是需要基于sql文件来完成的,因此在sql语句发生变化时需要去jenkins服务端修改对应的sql文件或者通...

一点空白
07/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
16分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
22分钟前
2
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
30分钟前
2
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
32分钟前
3
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
33分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部