Java コレクションを演算できるのはやはり便利だと思う。
2008/01/13
2008/01/15
commons
groovy
java
コレクションを演算できるはやはり便利だと思う。
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
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
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
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
: