`
txf2004
  • 浏览: 7042236 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

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语言作为动态语言的特点来。

分享到:
评论

相关推荐

    Groovy学习资料(包括Groovy in action 的中英文以及API)

    此外,Groovy与Java完全兼容,可以无缝集成到现有的Java项目中,使用Groovy编写的代码可以直接被Java代码调用。 在第二部分,Groovy in Action详细探讨了Groovy的高级特性,如元编程和领域特定语言(DSL)。元编程...

    [Groovy入门]第三讲.将玩具信息写到集合

    学习Groovy的集合操作对于理解和编写Groovy代码至关重要,因为它们是处理和组织数据的基础。在实际开发中,你会经常看到它们的身影,无论是简单的数据管理还是复杂的业务逻辑。通过深入理解和实践这些概念,你将能够...

    Groovy 2 Cookbook (英文版)

    通过Groovy,开发者可以编写更为简洁的代码,并能使用Groovy提供的丰富特性来提升开发效率。 3. Groovy 2 Cookbook提供了大量实用的Groovy编程技巧,这表明书中内容可能包括Groovy基础语法、对象和元编程、集合操作...

    Groovy in Action, Second Edition 源码

    8. **集合与流处理**:Groovy支持Java 8的Stream API,结合Groovy的特性,可以写出简洁且高效的集合处理代码。 9. **领域特定语言(DSL)**:Groovy非常适合构建DSL,因为其语法的灵活性和简洁性,使得创建自然、易...

    Groovy in Action 配套源码

    函数式编程风格使得代码更加简洁和易于测试。 3. **元编程**:Groovy允许在运行时修改类和方法的行为,这是元编程的一个典型例子。通过源码,你可以看到如何利用这一特性来增强代码的灵活性。 4. **GORM(Grails ...

    Groovy in action

    4. **操作集合**:Groovy提供了丰富的集合操作,如列表和映射,支持链式操作和内建的便利方法,使得集合处理更加简便。 5. **闭包**:闭包是Groovy的核心特性之一,可以作为一等公民使用,可以赋值给变量,作为参数...

    gradle中的groovy1

    1. **无需分号**:Groovy代码中的语句结束不需要分号,这与Python相同,提高了代码的可读性。 2. **自动的getter和setter**:在Groovy中,类的属性不需要显式地定义getter和setter方法,因为编译器会自动生成它们。...

    groovy代码-测试代码保存

    8. **GroovyShell和GroovyScriptEngine**:这两个类允许在运行时执行Groovy代码,这对于测试环境中的动态脚本执行非常有用。 9. **异常处理**:Groovy的异常处理类似Java,但更简洁。例如,`try-catch-finally`块...

    fnz:Groovy的函数式编程思路

    在实际应用中,FNZ可能包含了一些实用的函数式编程工具,如转换、过滤、组合等,以帮助开发者更高效地编写Groovy代码。 通过理解并熟练运用Groovy中的函数式编程特性,开发者可以写出更简洁、更易于测试和维护的...

    circle-stacker:在 Android 上演示 Groovy 的简单圆形堆叠游戏

    Gradle允许在同一个项目中混用Java和Groovy代码,这对于逐步迁移或者混合开发非常便利。 2. **UI设计与交互**:游戏界面由布局文件定义,Groovy的XML解析能力使得布局文件的动态生成和修改变得可能。同时,Groovy的...

    KS_Roastniyom

    Groovy类可以继承Java类,调用Java方法,甚至可以在Groovy代码中直接写Java代码。反之,Java程序也可以调用Groovy编写的类和方法,使得两者可以轻松地混合编程。 4. **Grails与Spring Boot** Groovy在Web开发中...

    javaSE代码实例

    17.3.4 ReentrantReadWriteLock读/写锁的具体使用 391 17.4 信号量的使用 393 17.4.1 Semaphore类简介 393 17.4.2 Semaphore类的具体使用 394 17.5 队列 396 17.5.1 Queue接口介绍 396 17.5.2 ...

    Grails基础教程.pdf

    - **玩转Groovy**:通过简单的代码示例展示Groovy的基本用法,如字符串操作、集合处理等。 - **与Java的基本不同点**:Groovy在语法上与Java有许多相似之处,但也存在显著差异,例如闭包、元编程等高级特性。 - **...

    HelloGroovy

    《深入浅出Groovy编程语言:HelloGroovy的探索之旅》 Groovy,作为一种动态、灵活的编程语言,是Java平台上的一个强大工具。它在Java虚拟机(JVM)上运行,与Java代码无缝集成,同时提供了简洁的语法和强大的功能。...

    nausd:Nausd脚本

    总的来说,"nausd:Nausd脚本"代表了一个使用Groovy语言实现的特定功能或系统的脚本集合,其用途可能涵盖自动化、数据处理等多个方面。通过深入研究"nausd-main"中的代码,我们可以揭示出更多的技术细节和实际应用...

    scala的操作笔记

    - **优雅的API设计**:Scala语言支持函数式编程特性,这使得开发者可以写出更加简洁、易于理解的代码。这对于框架的设计尤为重要,因为良好的API设计可以直接影响到用户的使用体验。 - **高效的执行性能**:尽管...

    Java7InstantHelpForJavaProgrammers2ndEditionBook-英文原版.zip

    3. **类型推断增强**:Java 7增强了类型推断,使得在方法引用和构造函数引用时,编译器可以更好地推断出泛型类型,减少冗余代码。 4. **字符串in switch语句**:Java 7开始,switch语句可以直接接受字符串作为条件...

    Getting Started with Google Guava英文版

    ### 开始使用Google Guava ...总之,Google Guava是一个功能强大且易用的Java库,通过使用它可以帮助开发者写出更高质量、更高效率的Java代码。无论是对于新手还是经验丰富的开发者来说,掌握Guava都是非常有益的。

    jdk.rar_java chm_jdk_jdk1.70 api_jdk1.70-03_site:en.pudn.com

    《Java SDK 1.70 API详解:程序员的宝典》 ...总结,JDK 1.70 API文档是Java开发者的重要参考资料,它涵盖了Java SE 7的核心功能,通过学习和熟练使用,开发者可以提升编程效率,写出高效、稳定的代码。

Global site tag (gtag.js) - Google Analytics