プログラマメモ2 - programmer no memo2

Java コレクションを演算できるのはやはり便利だと思う。 2008/01/13
2008/01/15

コレクションを演算できるはやはり便利だと思う。
CommonsのCollectionsはまだジェネリックに対応していないようですね。




import java.util.ArrayList;
import java.util.List;
import static org.apache.commons.collections.CollectionUtils.subtract;

public class A {

public static void main(String[] args) {
List<String> a = new ArrayList<String>(){{add("1");add("2");add("3");}};
List<String> b = new ArrayList<String>(){{add("6");add("2");add("7");}};

//差
List<String> c = (List<String>) subtract(a, b);
System.out.println(c);

}

}


Groovyで同じことをしてみます。
import static org.apache.commons.collections.CollectionUtils.subtract;

def a = [1,2,3,4,5,6,7]
def b = [1,2,4]

def c = subtract(a, b)

print c



Groovyだともっと直感的にできるっぽい。
そのまま引けばよい。

import static org.apache.commons.collections.CollectionUtils.subtract;

def a = [1,2,3,4,5,6,7]
def b = [1,2,4]

def c = subtract(a, b)
def d = a - b

assert c == d


といってもこの使い方でよいかわからないけど。

あと、共通の値を求めることができるintersectは、Groovyに用意されていた。
で、commonsのものとあわせてためしてみた。要sort。
import static org.apache.commons.collections.CollectionUtils.intersection

def a = [1,2,3]
def b = [1,2,3]

def c = intersection(a, b).sort()
def d = a.intersect(b)

assert c == d


グーグルのコレクション


Rubyのほうをちらりと見てみたら、いろいろできるようです。
Rubyリファレンスマニュアル - 機能別索引

JRubyのコンソールで試してみた。



関連

Arrays - Computing Union, Intersection, or Difference of Unique Lists

: