【Groovy】集合遍历 ( 使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 | 代码示例 )

简介: 【Groovy】集合遍历 ( 使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 | 代码示例 )

文章目录

一、使用集合的 findAll 方法查找集合中符合匹配条件的所有元素

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

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

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

二、完整代码示例





一、使用集合的 findAll 方法查找集合中符合匹配条件的所有元素


在上一篇博客 【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]

     

执行结果 :


[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{
            // 返回第一个不为空的元素
            true
        }
        // 打印 [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]






二、完整代码示例


完整代码示例 :


class Test {
    static void main(args) {
        // 为 ArrayList 设置初始值
        def list = ["1", "2", "3", "1", "2", "3"]
        // I. 闭包中使用 == 作为查找匹配条件
        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{
            // 返回第一个不为空的元素
            true
        }
        // 打印 [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]

image.png

目录
相关文章
|
监控 Java 索引
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
|
5月前
|
机器学习/深度学习 人工智能 搜索推荐
Thinking Machines Lab最新研究结果如何复现?On-Policy Distillation让训练成本直降10倍
Thinking Machines Lab提出On-Policy Distillation技术,让小模型高效继承大模型能力。相比传统强化学习,训练成本降低90%,效率提升十倍,支持本地部署、降低成本与延迟。结合vLLM加速与独立DeepSpeed配置,MS-SWIFT框架实现开箱即用的高效蒸馏训练,助力轻量模型具备“会思考、能纠错、可进化”的智能。
806 10
|
5月前
|
SQL Java 数据库连接
MyBatisPlus
MyBatisPlus是MyBatis的增强版,致力于简化Java持久层开发。它在保留MyBatis灵活性的基础上,通过自动化CRUD、优雅的条件构造器、分页插件等特性,大幅提升开发效率。其“半自动化”设计平衡了便捷与可控,完美融合Spring Boot生态,支持多种数据库与现代架构,兼具性能优化与团队协作优势,是企业级开发的智慧之选。(238字)
|
8月前
|
数据采集 存储 人工智能
从“看得见”到“会调参”:智能化工艺参数调优系统如何突破传统局限?
本文由产品专家三桥君介绍了智能化工艺参数调优系统的关键技术与应用价值。该系统通过现场视频采集、图像识别模块获取实时数据,结合历史经验数字化形成的向量数据库,利用大模型进行智能推理输出最优参数建议,并由智能体执行调整。系统实现了从数据感知到智能调参的闭环控制,显著提升了工艺参数优化的准确性和生产效率,突破了传统经验调参的局限性。
448 0
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
Docker 容器
29-Docker-常用命令详解-docker history/diff
29-Docker-常用命令详解-docker history/diff
|
机器学习/深度学习 编解码 自动驾驶
全新ViT Backbone | PLG-ViT 同时具有并行局部和全局自注意力的轻量化视觉Transformer
全新ViT Backbone | PLG-ViT 同时具有并行局部和全局自注意力的轻量化视觉Transformer
676 0
|
Java Shell Docker
记一次异常停机损坏了orientdb 导致nexus2无法启动
在一台centos7上通过docker部署了nexus2. 昨天zabbix报警,主机宕机了。查看控制台发现有SATA报错(原因不明)。
3557 0
|
前端开发 JavaScript 程序员
Tailwind 生成的 CSS文件竟然有 3.7 Mb 这么巨大!这还能用?
Tailwind 是最近国外大火的 Utility CSS 框架,形态上有点类似以前的 Bootstrap,潮流是一种轮回。 用它来写一个卡片,大概是这样的体验,只用到了工具 class,而不用写任何额外的样式:
syntax error, expect {, actual [, pos 0 at
syntax error, expect {, actual [, pos 0 at
637 0

热门文章

最新文章