文章目录

  • 一、使用集合的 find 方法查找集合元素
    • 1、闭包中使用 == 作为查找匹配条件
    • 2、闭包中使用 is 作为查找匹配条件
    • 3、闭包中使用 true 作为查找匹配条件
  • 二、完整代码示例

一、使用集合的 find 方法查找集合元素


集合的 find 方法 , 传入一个闭包 , 闭包中定义查找的匹配条件 ;

特别注意 , 查找匹配条件时 ,

  • Groovy 中的 " == " 符号 相当于 Java 中的 equals 方法 ;
  • Groovy 中的 is 方法 , 相当于 Java 中的 " == " 地址比较运算 ;

集合的 find 方法返回值 , 返回符合闭包中的匹配条件的第一个元素的值 , 即使后面还有符合条件的元素 , 也不再进行遍历了 ;

集合的 find 方法原型 :

    /*** 查找与闭包条件匹配的第一个值.  Example:* <pre class="groovyTestCase">def list = [1,2,3]* assert 2 == list.find { it > 1 }* </pre>** @param self    一个集合* @param closure 一个闭包条件* @return 找到的第一个对象,按照集合迭代器的顺序,如果没有匹配的元素,则为null* @since 1.0*/public static <T> T find(Collection<T> self, @ClosureParams(FirstParam.FirstGenericType.class) Closure closure) {BooleanClosureWrapper bcw = new BooleanClosureWrapper(closure);for (T value : self) {if (bcw.call(value)) {return value;}}return null;}

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

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

代码示例 :

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

执行结果 :

[1, 2, 3]
1

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

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

代码示例 :

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

执行结果 :

[1, 2, 3]
3

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

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

代码示例 :

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

执行结果 :

[1, 2, 3]
1

二、完整代码示例


完整代码示例 :

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

执行结果 :

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

【Groovy】集合遍历 ( 使用集合的 find 方法查找集合元素 | 闭包中使用 == 作为查找匹配条件 | 闭包中使用 is 作为查找匹配条件 | 闭包使用 true 作为条件 | 代码示例 )相关推荐

  1. C#集合利用System.Linq.Enumerable.Select()方法执行集合类型转换

    将List<dynamic>集合中的guid转换为强类型的Guid string authorsJson=[{"guid":"e1a2c42d-9337-41 ...

  2. 【Groovy】集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )

    文章目录 一.调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 二.代码示例 一.调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 集合的 every 方法 , 用于 ...

  3. Collection集合--遍历List集合的五种方法

    一.总结 遍历List集合的方法 方法描述 方法一 由迭代器Iterator进行遍历 方法二 由集合定义时的泛型遍历for(T t:list) 方法三 根据索引遍历for(int i = 0;i &l ...

  4. 【Flutter】Dart 数据类型 List 集合类型 ( 定义集合 | 初始化 | 泛型用法 | 初始化后添加元素 | 集合生成函数 | 集合遍历 )

    文章目录 I . 定义集合并初始化 II . 集合泛型用法 III . 集合添加元素 IV . 集合生成函数 V . 集合遍历 VI . 集合示例代码 I . 定义集合并初始化 定义并初始化 List ...

  5. 【EventBus】事件通信框架 ( 订阅类-订阅方法缓存集合 | 事件类型-订阅者集合 | 订阅对象-事件类型集合 )

    文章目录 前言 一.订阅类-订阅方法缓存集合 二.事件类型-订阅者集合 三.订阅对象-事件类型集合 前言 首先声明几个数据结构 , 参考 [EventBus]EventBus 源码解析 ( 注册订阅者 ...

  6. python集合的定义方式_11-Python基础知识学习—集合类型

    定义集合 集合和 list.tuple.dict 一样都可以存放多个值,但是集合主要用于: 去重和关系运算 .在{}内用逗号分隔开多个元素就是集合,它具备以下三个特点: 每个元素必须是不可变类型 集合 ...

  7. python怎么清除代码_Python如何清空列表?清空列表的4种方法(代码示例)

    通过Python语言提供的不同构造的方法可以有许多方法来清空列表,下面本篇文章就来给带大家介绍Python中4种清空列表的方法,希望对大家有所帮助. 方法1:重新初始化列表 可以重初始化列表,初始化该 ...

  8. 你可能不知道的JavaScript 遍历DOM的几种方法

    最近看到一篇关于前端优化方面的文章,里面提到了几点对DOM遍历操作的优化,文章只是一笔带过,并没有深入的讲解. 其中提到了几个优化的手段,乍一看似乎没见过,然后再仔细想想,其实无论是犀牛书还是红宝书都 ...

  9. 【Groovy】闭包 Closure ( 闭包参数绑定 | curry 函数 | rcurry 函数 | ncurry 函数 | 代码示例 )

    文章目录 一.闭包参数绑定 1.闭包参数绑定 curry 函数 2.闭包参数绑定 rcurry 函数 3.闭包参数绑定 ncurry 函数 二.完整代码示例 一.闭包参数绑定 闭包 Closure 提 ...

  10. 【设计模式】外观模式 ( 概念 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 I . 外观模式概念 II . 外观模式 适用场景 III . 外观模式 优缺点 IV . 外观模式与其它设计模式的联系与区别 V . 外观模式 代码示例 I . 外观模式概念 1 . 外观 ...

最新文章

  1. 前SAP全球VP加盟第四范式任总裁,戴文渊:加速多行业规模化扩展
  2. 吐血总结:AQS到底是什么?
  3. Java调用.Net的web service的几种方式
  4. 《Java和Android开发实战详解》——1.2节Java基础知识
  5. 【343天】每日项目总结系列081(2018.01.14)
  6. 数据科学和人工智能技术笔记 七、特征工程
  7. 特斯拉电池检测_特斯拉风格的割草机,也是采用电池供电
  8. 卡尔曼滤波器的一种形象表达
  9. c语言ad转换实验报告,有关单片机AD转换的实验报告
  10. 单声道,立体声 ,功放驱动喇叭的功率选择,功放的适配(A类,B类。。),怎样测量音量信号--怎样不烧坏喇叭。
  11. Java基础第三天复习
  12. 计算机切屏的三种快捷键,小技巧:笔记本切换屏幕快捷键_计算机的基本知识_IT /计算机_信息...
  13. su VS sudo
  14. 电脑休眠后无法唤醒的解决办法!
  15. xt6使用技巧_六人花(zuo)样(si)出行指南,教你用各种姿势解锁XT6
  16. 【软件工程】Jackson图
  17. GPS反演潮位修复方法
  18. C/C++_随机数生成函数详解
  19. kotlin中map对value进行排序
  20. 实时系统-调度算法和可调度分析

热门文章

  1. Gamma校正及其OpenCV实现
  2. keta-custom DWZ validationEng IE 下表单重复提交BUG原因及修复方法
  3. 大型门户网站架构设计的可伸缩性
  4. 中小企业数据异地备份容灾解决方案
  5. CF1097D Makoto and a Blackboard(期望)
  6. 【学习笔记】树形结构基础
  7. Android studio 使用NDK工具实现JNI编程
  8. (转)个例子让你了解Java反射机制
  9. JSP FORM 提交
  10. PHP文件包含漏洞原理分析和利用方法