groovy - 您能摆脱Groovy “each”的关闭吗?

标签 groovy

是否可以从Groovy break生成.each{Closure},还是应该改用经典循环?

最佳答案

不,您不能在不引发异常的情况下中止“每个”。如果希望中断在特定条件下中止,则可能需要经典循环。

另外,您可以使用“查找”闭包代替每个闭包,并在需要休息时返回true。

此示例在处理整个列表之前将中止:

def a = [1, 2, 3, 4, 5, 6, 7]

a.find { 
    if (it > 5) return true // break
    println it  // do the stuff that you wanted to before break
    return false // keep looping
}

版画
1
2
3
4
5

但不会打印6或7。

使用接受闭包的自定义中断行为,编写自己的迭代器方法也非常容易:
List.metaClass.eachUntilGreaterThanFive = { closure ->
    for ( value in delegate ) {
        if ( value  > 5 ) break
        closure(value)
    }
}

def a = [1, 2, 3, 4, 5, 6, 7]

a.eachUntilGreaterThanFive {
    println it
}

同时打印:
1
2
3
4
5    

关于groovy - 您能摆脱Groovy “each”的关闭吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31599691/

相关文章:

grails - Intellij IDEA + Groovy + 更好的静态验证?

groovy - 使用jenkins修改文件

grails - 从Grails中的m:n关系加载域实例

string - Groovy 字符串评估运行时

jenkins - 如何解析数据,并写入 JSON 文件

rest - 如何将参数作为 SOAP UI REST 请求中路径的一部分添加到 url?

java - Maven 不运行由 groovy 编译器生成的 TestNG 测试

grails - 如何在Grails Controller 中渲染HTML/JavaScript?

groovy - 在 Groovy 中使用闭包实现接口(interface) - 调用了什么方法?

grails - 使用groovy 1.8及更高版本重写渲染方法