Closure は便利だけれども Groovy の場合は途中で break や return *1ができない。 値を返す必要がないときは each より for を使っているが内部イテレータが必要な場合は先に findAll でフィルタリングしている。 でも Groovy も一部のメソッドは break のようなことができるみたいだ。 directive というプロパティに Closure.DONE を設定すれば、その Closure のループから抜けることができる。 assert [1,2,3] == (1..10).collect { if (it >= 3) directive = Closure.DONE it } src を検索した限り collect, collectAll, times で使える findAll と比較すると最後の要素を拾ってしまうが break する分速い