Groovy > Listの使い方
更新日
2019-11-14
広告
Groovyは、JavaScriptのリテラル表記っぽく、リストを定義できます。
def list = [] list.add(20) list.add("test")以下は、サンプル ListSample.groovy です。
def list = [10, 50, 'sweng', new Date()] println(list[0]) // 要素0にアクセス println(list[2]) // 要素2にアクセス println(list.get(3)) // 要素3にアクセス println(list.size()) // リストのサイズ実行結果は以下のようになります。
$ groovy ListSample 10 sweng Wed Aug 15 16:20:50 JST 2012 4
for-in文
for-in文で、リストをループできます(ListSample2.groovy)。def list = [10, 50, 'sweng', new Date()] for (item in list) { println(item) }実行結果は以下のようになります。
$ groovy ListSample2 10 50 sweng Wed Aug 15 16:24:01 JST 2012
each
リストの各要素に対して、メソッド(クロージャ)を適用することも簡単にかけます(ListSample3.groovy)。def list = [10, 50, 'sweng', new Date()] list.each { item -> println "--- $item ---" }波カッコの最初に、配列の各要素を表す変数名を宣言します。上の例では item としています。変数名を宣言しないと、デフォルトで it となります。ListSample3.groovy の実行結果は以下のようになります。
$ groovy ListSample3 --- 10 --- --- 50 --- --- sweng --- --- Wed Aug 15 16:31:22 JST 2012 ---事前に定義したクロージャを適用することもできます。クロージャの内容が多い場合は、こちらのほうがコードが見やすいかもしれません(ListSample4.groovy)。
def closure = { item -> def text = "xxxxx $item xxxxx" println text } def list = [10, 50, 'sweng', new Date()] list.each { closure.call(it) }これを実行すると、以下の結果になります。
$ groovy ListSample4 xxxxx 10 xxxxx xxxxx 50 xxxxx xxxxx sweng xxxxx xxxxx Wed Aug 15 16:41:03 JST 2012 xxxxxリストの要素番号(インデックス)を利用した処理を行いたい場合は、eachWithIndexを使います。
[10, 50, 'sweng', new Date()].eachWithIndex { item, index -> println "${index} --> ${item}" }実行結果は、以下のようになります。
0 --> 10 1 --> 50 2 --> sweng 3 --> Wed Aug 15 17:45:11 JST 2012
collect
collectを使うと、クロージャを適用した結果を、新しいリストとして取得できます。def list = [10, 50, 100] def newList = list.collect { it * 2 } println list println newList実行結果は以下です。
groovy ListSample5 [10, 50, 100] [20, 100, 200]
find/findAll
findは、クロージャの適用結果が「最初に真」になる要素を返します。findAllは、クロージャの適用結果が「真」になる要素を全て返します。def list = [10, 50, 100] def newList = list.find { it > 30 } // 要素 50 が返される println newList def newList2 = list.findAll { it > 30 } // 要素 50と100 が返される println newList2実行結果は以下です。
$ groovy ListSample6 50 [50, 100]
every/any
everyは、クロージャの適用結果が「全て真」になる場合に、trueを返します。anyは、クロージャの適用結果が「1つでも真」になる場合に、trueを返します。def list = [10, 50, 100] def result1 = list.every { it > 5 } println result1 def result2 = list.any { it > 70 } // 要素100が真になるのでtrue println result2実行結果は以下です。
$ groovy ListSample7 true true
first/last
firstは先頭の要素を返します。 lastは最後の要素を返します。def list = [10, 50, 100] list.first() // -> 10 list.last() // -> 100
max/min
maxは要素中の最大値を、minは要素中の最小値を返します。def list = [10, 50, 100] def max = list.max() def min = list.min() println "${max}/${min}"実行結果は以下です。
$ groovy ListSample8 100/10
join
引数文字列で、配列の各要素を連結します。def list = ['a', 'b', 'c'] println list.join(',')実行結果は以下です。
$ groovy ListSample9 a,b,c
sort
ソートする方法を紹介します。def list = [5, 4, 12] println list.sort() // 昇順でソート println list.sort{ it * -1 } // 降順でソート println list.sort().reverse() // 降順でソートこの実行結果は以下のようになります。
[4, 5, 12] [12, 5, 4] [12, 5, 4]クロージャを使って、オブジェクトをソートすることも可能です。 以下の例は、Dataオブジェクトをソートします。
import groovy.transform.ToString def dataList = [new Data(id: 5), new Data(id: 4), new Data(id: 12)] def sortedList = dataList.sort { data1, data2 -> // 昇順ソート return data1.id - data2.id } println dataList @ToString class Data { Integer id }実行結果は以下のようになります。
$ groovy ListSample12.groovy [Data(4), Data(5), Data(12)]
広告
お問い合わせは sweng.tips@gmail.com まで。