別のコレクションからのコレクションの生成
collect()関数を使用して、既存のコレクションから新しいコレクションを生成できます。 結果には、元のコレクションの各要素のクローズを評価した結果が含まれます。
次の例では、uppercasedNames
コレクションは、電話帳のすべてのマップ・エントリの大文字のname
プロパティ値のリストです。
def phonebook = [
[name: 'Steve', phone: '+39-123456789'],
[name: 'Joey', phone: '+1-234567890'],
[name: 'Sara', phone: '+39-345678901'],
[name: 'Zoe', phone: '+44-456789123']
]
def uppercasedNames = phonebook.collect { it?.name?.toUpperCase() }
チェーン内のコレクション関数を「最初の」フィルタに組み合せて、一致するエントリのみの結果を収集できます。 たとえば、次のコードは、イタリアの電話番号を持つ
phonebook
エントリのname
プロパティの値のリストを生成します。 // First filter phonebook collection, then collect the name values
def italianNames = phonebook.findAll { it?.phone?.startsWith('+39-') }
.collect { it?.name }