倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Groovy in Addiction (8) : List に追加されたメソッド

今回は Groovy でリスト (java.util.List) に追加されているメソッドのうち、以前に紹介しなかったものについて見ていきます。 Groovy JDK を参考にしています(一覧)。

Groovyイン・アクション

Groovyイン・アクション

List を返すメソッド(オーバーライドしているもの)


ここでは、List を返すメソッドのうち、Collection のメソッドをオーバーライドしているものを見ていきます。

メソッド名 返り値 メソッド名
(Generics)
返り値
(Generics)
asImmutable() List asImmutable() List<E>
asSynchronized() List asSynchronized() List<E>

これら以外にも、前回みたメソッドのうち Collection を返すもの()も、List に対して呼び出せば List を返します*1

  • each(Closure), eachWithIndex(Closure)
  • intersect(Collection)
  • findAll(Closure)
  • collect(Collection, Closure)
  • unique(), unique(Comparator), unique(Closure)
  • grep(Object)

List に定義されたList, Set を返すメソッド

メソッド名 返り値 メソッド名
(Generics)
返り値
(Generics)
reverse() List reverse() List<E>
reverseEach(Closure) List reverseEach(Closure) List<E>
subsequences() Set subsequences() Set<List<E>>
permutations() Set permutations() Set<List<E>>
transpose() List transpose() List<List<E>>
list = [1, 2, 3];

//***** reverse(), reverseEach() *****
assert list.reverse() == [3, 2, 1];

s = ''; list.reverseEach{ s += it };
assert s == '321';

//***** subsequence() *****
assert list.subsequences() == ([[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]] as Set);
assert list.subsequences().size() == 2.power(list.size()) - 1;    // 2^n - 1 (-1は空集合を除くため)

//***** permutations() *****
assert list.permutations() == ([[1, 2, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2], [2, 1, 3], [1, 3, 2]] as Set);

n = 1; 1.upto(list.size()){ n *= it }
assert list.permutations().size() == n;

//***** transpose() *****
matrix = [[11, 12], 
              [21, 22]];
tmatrix = matrix.transpose(); 
assert tmatrix == [[11, 21], 
                           [12, 22]];

0.upto(matrix.size()-1){ i ->
    0.upto(matrix[i].size()-1){ j ->
        assert tmatrix[i][j] == matrix[j][i];
    }
}
  • subsequences() は List としての部分集合すべてを返します。 ただし、空リストは除きます。
  • permutations() は置換リストを全てかえします。 高校数学でやった nPr ってやつ。
  • transpose() は、2重リスト、つまり行列 (matrix) に対して呼び出せて、その転置行列、つまり行と列を入れ替えたものを返します。

Queue としてのメソッド


以前見た getAt(), putAt() メソッド以外に、スタックやキューとして扱うための要素取得・設定メソッドも定義されています。

メソッド名 返り値 メソッド名
(Generics)
返り値
(Generics)
first() Object first() E
last() Object last() E
head() Object head() E
tail() List tail() List<E>
pop() Object pop() E
push(Object) boolean push(E) boolean
list = [1, 2, 3];

//***** first(), last(), head(), tail() *****
assert list.first() == 1;
assert list.last() == 3;

assert list.head() == 1;
assert list.tail() == [2, 3];

//***** push(), pop() *****
list.push(4);
assert list == [1, 2, 3, 4];

poped = list.pop();
assert poped == 4;
assert list == [1, 2, 3];

その他のメソッド

メソッド名 返り値 メソッド名
(Generics)
返り値
(Generics)
equals(Object[])
equals(List)
boolean equals(E[])
equals(List<E>)
boolean
execute()
execute(String[], File)
execute(List, File)
Process execute()
execute(String[], File)
execute(List, File)
Process

*1:asImmutable(), asSynchronized() のようにオーバーライドしておいてくれると Groovy 初心者の Java プログラマには有り難いんですけど。