Groovy在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
成品宽表(分项目) 测试 发布于:2024-03-21 09:45 def result = [ msgCode: '' ] return result 发布于:2024-02-19 14:41 筛选存在和不存在的对象 发布于:2024-01-18 16:29 计算金蝶鉴权 发布于:2024-01-17 20:37 骨密度结果回传 发布于:2024-01-12 10:56 骨密度获取信息返回 发布于:2024-01-11 15:02 骨密度获取信息入参 发布于:2024-01-11 09:43 自动提交定金学费 发布于:2023-12-25 10:44 多条【定金/学费】合并为一条【协议收款】 发布于:2023-12-22 14:38 顾问业绩学费更新顾问业绩 发布于:2023-12-22 14:37 编辑学费更新收款的顾问业绩拆分 发布于:2023-12-22 14:36 学费编辑器效验 发布于:2023-12-22 13:35 自动生成排课明细 发布于:2023-12-12 09:13 根据排课日期生成日程 发布于:2023-12-11 10:17 排课排课效验 发布于:2023-12-11 09:13 排课排课效验 发布于:2023-12-08 15:15 线索线索分发 发布于:2023-12-07 15:32 获取钉钉花名册数据 发布于:2023-11-23 11:53 日期函数转换 发布于:2023-11-22 11:37 济南肺功能回写出参 发布于:2023-10-14 17:54 肺功能结果回传入参 发布于:2023-10-14 17:54 济南肺功能申请单出参 发布于:2023-10-14 17:18 济南肺功能获取申请单入参 发布于:2023-10-13 17:41 济南身高体重仪结果回写出餐 发布于:2023-10-09 14:48 身高体重仪结果回传入参 发布于:2023-10-09 15:34 身高体重仪信息查询返回 发布于:2024-01-11 14:32 济南获取身高体重信息 发布于:2023-10-20 15:49 新his查档返回 发布于:2023-09-11 17:20 老HIS取消计费出参 发布于:2023-09-04 19:28 老HIS取消计费入参 发布于:2023-09-04 19:28 老HIS计费返回 发布于:2023-09-04 19:28 杭州老HIS结算入参 发布于:2023-08-31 14:32 统一接口出参微脉 发布于:2023-08-25 15:00 新his查档 发布于:2023-10-17 16:40 统一接口入参微脉 发布于:2023-08-25 15:00 老his团检计费 发布于:2023-07-04 17:59 老his发票查询档案 发布于:2023-07-06 17:29 分组list,分批list 发布于:2023-06-12 12:42 老HIS发票 发布于:2023-07-06 17:30 麦迪克斯返参 发布于:2023-06-08 14:26 麦迪克斯申请单入参 发布于:2023-06-08 14:22 groovy测试 发布于:2023-06-06 10:57 老HIS新计费 发布于:2023-05-31 22:00 uf3.0生成oracle数据库用户名 发布于:2023-05-29 11:43 人体成份结果回传返回 发布于:2023-05-23 20:01 人体成份结果回传入参 发布于:2023-05-23 17:36 人体成份出参 发布于:2023-05-22 11:51 人体成份入参 发布于:2023-10-08 17:50 老HIS项目计费返回 发布于:2023-06-30 17:48 老his项目计费 发布于:2023-06-30 10:16 [更多]
显示目录

闭包



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

闭包

闭包是一个短的匿名代码块。它通常跨越几行代码。一个方法甚至可以将代码块作为参数。它们是匿名的。

下面是一个简单闭包的例子,它是什么样子。

class Example {
   static void main(String[] args) {
      def clos = {println "Hello World"};
      clos.call();
   } 
}

在上面的例子中,代码行 - {println“Hello World”}被称为闭包。此标识符引用的代码块可以使用call语句执行。

当我们运行上面的程序,我们将得到以下结果 -

Hello World

闭包中的形式参数

闭包也可以包含形式参数,以使它们更有用,就像Groovy中的方法一样。

class Example {
   static void main(String[] args) {
      def clos = {param->println "Hello ${param}"};
      clos.call("World");
   } 
}

在上面的代码示例中,注意使用$ {param},这导致closure接受一个参数。当通过clos.call语句调用闭包时,我们现在可以选择将一个参数传递给闭包。

当我们运行上面的程序,我们将得到以下结果 -

Hello World

下一个图重复了前面的例子并产生相同的结果,但显示可以使用被称为它的隐式单个参数。这里的'it'是Groovy中的关键字。

class Example {
   static void main(String[] args) {
      def clos = {println "Hello ${it}"};
      clos.call("World");
   } 
}

当我们运行上面的程序,我们将得到以下结果 -

Hello World

闭包和变量

更正式地,闭包可以在定义闭包时引用变量。以下是如何实现这一点的示例。

class Example {     
   static void main(String[] args) {
      def str1 = "Hello";
      def clos = {param -> println "${str1} ${param}"}
      clos.call("World");

      // We are now changing the value of the String str1 which is 
      referenced in the closure
      str1 = "Welcome";
      clos.call("World");
   } 
}

在上面的例子中,除了向闭包传递参数之外,我们还定义了一个名为str1的变量。闭包也接受变量和参数。

当我们运行上面的程序,我们将得到以下结果 -

Hello World 
Welcome World

在方法中使用闭包

闭包也可以用作方法的参数。在Groovy中,很多用于数据类型(例如列表和集合)的内置方法都有闭包作为参数类型。

以下示例显示如何将闭包作为参数发送到方法。

class Example { 
   def static Display(clo) {
      // This time the $param parameter gets replaced by the string "Inner"         
      clo.call("Inner");
   } 

   static void main(String[] args) {
      def str1 = "Hello";
      def clos = { param -> println "${str1} ${param}" }
      clos.call("World");

      // We are now changing the value of the String str1 which is 
      referenced in the closure
      str1 = "Welcome";
      clos.call("World");

      // Passing our closure to a method
      Example.Display(clos);
   } 
}

在上述示例中,

  • 我们定义一个名为Display的静态方法,它将闭包作为参数。

  • 然后我们在我们的main方法中定义一个闭包,并将它作为一个参数传递给我们的Display方法。

当我们运行上面的程序,我们将得到以下结果 -

Hello World 
Welcome World 
Welcome Inner

集合和字符串中的闭包

几个List,Map和String方法接受一个闭包作为参数。让我们看看在这些数据类型中如何使用闭包的例子。

使用闭包和列表

以下示例显示如何使用闭包与列表。在下面的例子中,我们首先定义一个简单的值列表。列表集合类型然后定义一个名为.each的函数。此函数将闭包作为参数,并将闭包应用于列表的每个元素

class Example {
   static void main(String[] args) {
      def lst = [11, 12, 13, 14];
      lst.each {println it}
   } 
}

当我们运行上面的程序,我们将得到以下结果 -

11 
12 
13 
14

使用映射闭包

以下示例显示了如何使用闭包。在下面的例子中,我们首先定义一个简单的关键值项Map。然后,映射集合类型定义一个名为.each的函数。此函数将闭包作为参数,并将闭包应用于映射的每个键值对。

class Example {
   static void main(String[] args) {
      def mp = ["TopicName" : "Maps", "TopicDescription" : "Methods in Maps"]             
      mp.each {println it}
      mp.each {println "${it.key} maps to: ${it.value}"}
   } 
}

当我们运行上面的程序,我们会得到以下结果 -

TopicName = Maps 
TopicDescription = Methods in Maps 
TopicName maps to: Maps 
TopicDescription maps to: Methods in Maps

通常,我们可能希望遍历集合的成员,并且仅当元素满足一些标准时应用一些逻辑。这很容易用闭包中的条件语句来处理。

class Example {
   static void main(String[] args) {
      def lst = [1,2,3,4];
      lst.each {println it}
      println("The list will only display those numbers which are divisible by 2")
      lst.each{num -> if(num % 2 == 0) println num}
   } 
}

上面的例子显示了在闭包中使用的条件if(num%2 == 0)表达式,用于检查列表中的每个项目是否可被2整除。

当我们运行上面的程序,我们会得到以下结果 -

1 
2 
3 
4 
The list will only display those numbers which are divisible by 2.
2 
4

闭包使用的方法

闭包本身提供了一些方法。

序号 方法 描述
1 find() find方法查找集合中与某个条件匹配的第一个值。
2 findAll() 它找到接收对象中与闭合条件匹配的所有值。
3 any() & every() 方法any迭代集合的每个元素,检查布尔谓词是否对至少一个元素有效。
4 collect() 该方法通过集合收集迭代,使用闭包作为变换器将每个元素转换为新值。
由JSRUN为你提供的Groovy在线运行、在线编译工具
        JSRUN提供的Groovy 在线运行,Groovy 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout