機械翻訳について

コレクション内のアイテムの検索

コレクション内の条件に一致するすべてのアイテムを検索するには、findAll()関数を使用します。 探しているアイテムを識別するブール・クローズを受け入れます。

結果は、クローズがtrueと評価されるコレクション内のすべてのアイテムのListです。 一致するアイテムがない場合、またはコレクションが空の場合は、空のコレクションが返されます。

次に示すように、閉じをインラインで渡す場合は、カッコを外すことができます。 この例の結果は、アドレスがサフィクス.eduで終わるすべての受信者Eメールを含むリストです:
def recipients = ['sjc@example.edu','dan@example.com',
                  'spm@example.edu','jim@example.org']
// Pass boolean closure using implicit "it" parameter with find criteria
// (using safe-navigation operator in case any element is null)
def eduAddreses = recipients.findAll{ it?.endsWith('.edu') }

MapオブジェクトのListに適用すると、次に示すように、クローズで現在のマップのキーを名前で参照できます。 この例では、イタリアの国コード「+39-」で始まる電話番号を持つ電話帳エントリのリストを生成します。

def phonebook = [
                    [name: 'Steve', phone: '+39-123456789'],
                    [name: 'Joey',  phone: '+1-234567890'],
                    [name: 'Sara',  phone: '+39-345678901'],
                    [name: 'Zoe',   phone: '+44-456789123']   
                 ]
def italianFriends = phonebook.findAll { it?.phone?.startsWith('+39-') }
MapfindAll()をコールすると、各評価で終了に渡されるパラメータが現在のMapエントリになります。 各エントリには、必要に応じてクロージャ関数本文で参照できるkeyおよびvalueプロパティがあります。 結果は、クローズがtrueと評価されるエントリのみを含むMapになります。 次の例では、結果は、nameSteveである2人のユーザーのマップ・エントリを含むマップです。
def users = [
             'smuench':[name:'Steve', badge:'A123'],
             'jevans':[name:'Joe', badge:'B456'],
             'sburns':[name:'Steve', badge:'C789']
            ]
def usersNamedSteve = users.findAll { it?.value.name == 'Steve' }
一致する「最初の」アイテムのみを検索するには、findAll()のかわりにfind()関数を使用します。 同じブール型クローズを使用できますが、最初の一致が識別されると停止します。 findAll()とは対照的に、find()を使用する場合、述語に一致するアイテムがない場合、またはコレクションが空の場合はnullが返されます。

コンパニオン関数は、次のような他の検索操作を実行するために存在します:

  • any { boolean_predicate } - boolean_predicateがアイテムに対してtrueを返す場合はtrueを返します
  • every { boolean_predicate } - boolean_predicateがすべてのアイテムに対してtrueを返す場合はtrueを返します