1. ホーム
  2. groovy

[解決済み] Groovyの "each "クロージャから抜け出せるか?

2022-04-26 12:13:43

質問

を行うことは可能ですか? break をGroovyの .each{Closure} それとも古典的なループを使うべきでしょうか?

どのように解決するのですか?

例外を発生させずに、"each" を中止することはできません。 特定の条件下でブレークを中断させたい場合は、古典的なループを使用することになるでしょう。

あるいは、each の代わりに "find" クロージャを使用して、break を実行したときに 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