google-collections探訪(1) -map,filter-

Guavaってのが最近公開されたけど、これに将来的に統合される?というgoogle-collections(RC2)を今頃いじってみる。
まずmap,filterぽいのを。

Collections2.transform

mapに相当。要素に適用するメソッドはFunctionで用意。
mapでなくてtransformなのはC++STL由来?

final Function<Integer, Integer> square = new Function<Integer, Integer>() {
	public Integer apply(Integer elem) {
		return elem * elem;
	}
};

List<Integer> numbers = Arrays.asList(1,2,3,4,5);
System.out.println(Collections2.transform(numbers, square)); //[1, 4, 9, 16, 25]

Collections2.filter

名前の通り。要素に適用するメソッドはPredicate(述語の意)で用意。

final Predicate<Integer> isEven = new Predicate<Integer>() {
	public boolean apply(Integer elem) {
		return elem % 2 == 0;
	}
};

List<Integer> numbers = Arrays.asList(1,2,3,4,5);
System.out.println(Collections2.filter(numbers, isEven)); //[2, 4]

foldは?

fold/reduce/injectに相当するものは無いのかなと思ったけど、↓を見ると今のところ導入する気は無いみたい。
http://code.google.com/p/google-collections/issues/detail?id=230
http://code.google.com/p/google-collections/issues/detail?id=218