倭マン's BLOG

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

GDK のコレクションがこんなに便利なわけがない。 (Collection 編1) 集合演算、文字列関連

さて、今回から GDK が Collection に追加しているメソッドを見ていきます。 Object クラスに追加されているメソッドも、オーバライドされているものはまた扱います。

目次

分類はあくまで目安っす。 今回あつかうメソッドは集合演算と文字列関連のメソッド:

// 集合演算
boolean asBoolean()
boolean isCase(Object switchValue)
boolean containsAll(Object[] items)
Collection intersect(Collection right)
boolean disjoint(Collection right)

// 文字列関連
String join(String separator)
String toListString()
String toListString(int maxSize)

集合演算

まずは集合演算に関するメソッド:

メソッド 返り値 since 説明
asBoolean() boolean 1.7.0 空集合なら falseを、そうでないなら true を返す
isCase(Object) boolean 1.0 引数の要素を含んでいるかどうか
containsAll(Object[]) boolean 1.7.2 引数の配列の全要素を含んでいるかどうか
intersect(Collection) Collection 1.5.6 引数の集合との共通部分を返す
disjoint(Collection) boolean 1.0 引数の集合と共通部分がないかどうか

asBoolean() メソッド
asBoolean() メソッドは Object クラスでもでてきましたが、コレションでは空集合なら false、要素を持てば true を返します:

assert [0].asBoolean() == true
assert [].asBoolean() == false

isCase() メソッド
isCase() も Object クラスに定義されていたメソッドですが、コレクションの場合は引数のオブジェクトがこのコレクションの要素として含まれているなら true を、そうでないなら false を返します。 このメソッドは in キーワードや switch 文の case 節で使います:

def list1 = (0..10)    // [0, 1, 2, 3, ... , 10]

assert list1.isCase(0)
assert 0 in list1

containsAll() メソッド
containsAll(Object[]) メソッドは通常の Collection のメソッドに同名のものがありますが、集合ではなく配列を引数としてとれるようにしたメソッドです。 使い方は同じですが。

def list1 = (0..10)

def array = [2, 4] as Object[]
assert list1.containsAll(array)

assert list1.containsAll(1, 3, 7)

1つ目は無理して配列にしてますが、コレクションでできるならコレクションで。 Groovy では最後の引数がが配列なら可変長引数としてあつかえるので、2つ目ではオブジェクトをそのまま渡してます。 まぁ、このためにあるメソッドなんでしょうね。

intersect() メソッド
intersect() メソッドは引数のコレクションとの共通部分を返すメソッドです。

def list1 = (0..10)
def list2 = (0..20).findAll{ it % 2 == 0 }

assert list1.intersect(list2) == [0, 2, 4, 6, 8, 10]

もともとの Java 標準 API にもあってよさそうなメソッドですが・・・

disjoint() メソッド
disjoint() は引数のコレクションと共通部分がないかどうかを返します。 ない場合は true です。

def list1 = (0..10)
def list2 = (0..20).findAll{ it % 2 == 0 }

assert list1.disjoint(30..40)
assert !list1.disjoint(list2)

文字列関連

次は文字列関連のメソッド。

メソッド 返り値 since 説明
toListString()
toListString(int)
String 1.0
1.73
リスト形式の文字列を返す
join(String) String 1.0 要素の toString() を引数の文字列で連結して返す
def langs = ['Java', 'Groovy', 'Scala', 'Clojure']

// toListString()
assert langs.toListString() == '[Java, Groovy, Scala, Clojure]'
assert langs.toListString(15) == '[Java, Groovy, Scala, ...]'

// join()
assert langs.join('-') == 'Java-Groovy-Scala-Clojure'

int 値をとる toListString() メソッドは括弧[]で囲まれた文字列がおおよそ指定した文字数になる箇所で切って、残りを ... にします。 キッチリ指定した文字数にはならないもよう。 これらはデバッグとかで多用しそう。

次回は要素の追加とかかな?

プログラミングGROOVY

プログラミングGROOVY

  • 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/07/06
  • メディア: 単行本(ソフトカバー)
  • 購入: 6人 クリック: 392回
  • この商品を含むブログ (155件) を見る