在上一篇博客 【Groovy】集合遍历 ( 使用集合的 find 方法查找集合元素 | 闭包中使用 == 作为查找匹配条件 | 闭包中使用 is 作为查找匹配条件 | 闭包使用 true 作为条件 | 代码示例 ) 中 , 介绍了使用 find 方法 , 获取集合中第一个符合 闭包匹配条件的元素 ;

使用集合的 findAll 方法 , 可以 获取 集合 中 所有 符合 闭包匹配条件的元素 , 这些元素将使用一个新的集合盛放 , findAll 方法的返回值就是返回该符合 匹配条件 的元素 ;

集合的 findAll 方法原型 :

* 查找与关闭条件匹配的所有值。 * <pre class="groovyTestCase">assert [2,4] == [1,2,3,4].findAll { it % 2 == 0 }</pre> * @param self 集合 * @param closure 闭包条件 * @return 符合条件匹配的新的子集合 * @since 1.5.6 public static < T > Collection < T > findAll ( Collection < T > self , @ClosureParams ( FirstParam . FirstGenericType . class ) Closure closure ) { Collection < T > answer = createSimilarCollection ( self ) ; Iterator < T > iter = self . iterator ( ) ; return findAll ( closure , answer , iter ) ;

1、闭包中使用 == 作为 findAll 方法的查找匹配条件

在集合的 findAll 方法中 , 闭包中使用 == 作为查找匹配条件 , 查找集合中值为 “1” 的元素 , 此处的 == 等价于 Java 中调用 String 的 equals 方法 , 不是比较地址 ;

代码示例 :

        // I. 闭包中使用 == 作为查找匹配条件
        def findCollectionResult = list.findAll{
            // 查找集合中值为 "1" 的元素
            // 此处的 == 等价于 Java 中调用 String 的 equals 方法 , 不是比较地址
            it == "1"
        // 打印 [1, 2, 3, 1, 2, 3]
        println list
        // 打印 [1, 1]
        println findCollectionResult

执行结果 :

[1, 2, 3, 1, 2, 3]
[1, 1]

2、闭包中使用 is 作为 findAll 方法的查找匹配条件

在集合的 findAll 方法中 , 闭包中使用 is 作为查找匹配条件 , 查找集合中与 “3” 对象相同地址的元素 , 此处的 is 方法等价于调用 String 的 == 运算 , 不是比较值 ;

代码示例 :

        // II. 闭包中使用 is 作为查找匹配条件
        findCollectionResult = list.findAll{
            // 查找集合中与 "3" 对象相同地址的元素
            // 此处的 is 方法等价于调用 String 的 == 运算 , 不是比较值
            it.is("3")
        // 打印 [1, 2, 3, 1, 2, 3]
        println list
        // 打印 [3, 3]
        println findCollectionResult

执行结果 :

[1, 2, 3, 1, 2, 3]
[3, 3]

3、闭包中使用 true 作为 findAll 方法的查找匹配条件

在集合的 findAll 方法中 , 闭包中使用 true 作为查找匹配条件 , 查找集合中不为空的元素 , 此处返回第一个不为空的元素 ;

代码示例 :

        // III. 闭包中使用 true 作为条件 , 返回第一个不为空的元素
        findCollectionResult = list.findAll{
            // 返回第一个不为空的元素
        // 打印 [1, 2, 3, 1, 2, 3]
        println list
        // 打印 [1, 2, 3, 1, 2, 3]
        println findCollectionResult

执行结果 :

[1, 2, 3, 1, 2, 3]
[1, 2, 3, 1, 2, 3]
        def findCollectionResult = list.findAll{
            // 查找集合中值为 "1" 的元素
            // 此处的 == 等价于 Java 中调用 String 的 equals 方法 , 不是比较地址
            it == "1"
        // 打印 [1, 2, 3, 1, 2, 3]
        println list
        // 打印 [1, 1]
        println findCollectionResult
        // II. 闭包中使用 is 作为查找匹配条件
        findCollectionResult = list.findAll{
            // 查找集合中与 "3" 对象相同地址的元素
            // 此处的 is 方法等价于调用 String 的 == 运算 , 不是比较值
            it.is("3")
        // 打印 [1, 2, 3, 1, 2, 3]
        println list
        // 打印 [3, 3]
        println findCollectionResult
        // III. 闭包中使用 true 作为条件 , 返回第一个不为空的元素
        findCollectionResult = list.findAll{
            // 返回第一个不为空的元素
        // 打印 [1, 2, 3, 1, 2, 3]
        println list
        // 打印 [1, 2, 3, 1, 2, 3]
        println findCollectionResult

执行结果 :

[1, 2, 3, 1, 2, 3]
[1, 1]
[1, 2, 3, 1, 2, 3]
[3, 3]
[1, 2, 3, 1, 2, 3]
[1, 2, 3, 1, 2, 3]
                    一、使用集合的 findAll 方法查找集合中符合匹配条件的所有元素、1、闭包中使用 == 作为 findAll 方法的查找匹配条件、2、闭包中使用 is 作为 findAll 方法的查找匹配条件、3、闭包中使用 true 作为 findAll 方法的查找匹配条件、二、完整代码示例、
				
Groovy简介 Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy也可以使用其他非Java语言编写的库。 Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言的其他特性。 Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上
赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all-2.4.5-javadoc-API文档-文(简体)版.zip; Maven坐标:org.codehaus.groovy:groovy-all:2.4.5; 标签:codehaus、groovy、all、文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档代码和结构保持不变,注释和说明精准翻译,请放心使用。 students.add(new Student(1,"张三",90)); students.add(new Student(2,"李四",60)); students.add(new Student(3,"王五",30)); students.add(new Student(4,"赵六",85)); int studentId = 3; Student student = students.
【开发环境】安装 Hadoop 运行环境 ( 下载 Hadoop | 解压 Hadoop | 设置 Hadoop 环境变量 | 配置 Hadoop 环境脚本 | 安装 winutils ) Omer_: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文 【C++】C++ 引用详解 ① ( 变量的本质 - 引入 “ 引用 “ 概念 | 引用语法简介 | 引用做函数参数 | 复杂类型引用做函数参数 ) 小码农叔叔: C++优质好文,大佬文章总结的很详细,技术点丰富,操作性和适用性强,感谢大佬的分享,认真读完学到了很多,期待大佬的指点哦 【每日随笔】道德与人性 ① ( 人性的本质 - 生存和繁衍 | 道德不是人性 | 道德是如何产生的 | 遵守道德与法律的程度 - 代表了个体的竞争力 | 道德是反人性的 | 法律是如何产生的 ) C-调战士: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,文章思路清晰,图文并茂,详略得当,三连支持,期待博主持续输出好文! 【每日随笔】人为制造稀缺 ( 粮食 | 买房 | 租房 | 钻石 | 教育 ) 房子这个东西 , 本来不值钱 , 每个人都应该有 , 咱们社会主义初级阶段目前达不到这个水准 ; 但是人为制造稀缺 , 导致 10% 的人没有房子 , 收割了 50% 的人的大部分财富 ; 【每日随笔】道德与人性 ① ( 人性的本质 - 生存和繁衍 | 道德不是人性 | 道德是如何产生的 | 遵守道德与法律的程度 - 代表了个体的竞争力 | 道德是反人性的 | 法律是如何产生的 ) 【C++】const 关键字 与 #define 宏定义 对比 ( 相同点 - 都可定义常量和优化性能 | 不同点 - const 常量进行作用域检查和类型检查 )