是否可以从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/