ジェネリックスって便利だな

最近(ようやく!)、Javaジェネリックスの便利さに気づきつつある。
以下、お手製ユーティリティクラス

public class CollectionUtils {

    public static interface Selecter<T>{
        public boolean select(T element);
    }
    
    public static<T> List<T> select(List<T> list, Selecter<T> selecter){
        
        List<T> result = new ArrayList<T>();
        
        for (T t : list) {
            if(selecter.select(t)){
                result.add(t);
            }
        }
        return result;
    }

}

(実装的にはArrayListインスタンスを返すんじゃなくて、該当するものremoveでもいいんだけど、自分用途ではこれでOKでしたということで)


これを呼び出す例

List<String> values = ...;

values = CollectionUtils.select(values, new Selecter<String>(){
    @Override
    public boolean select(String value) {
        return value.length() > 0;
    }});

通化できる部分を共通化せず、「自作クラスのリストから、ある条件のものを選択する」処理とか無数に書き散らしてきた。アホだった。


でも、何だかみんなが使うコレクションのユーティリティーライブラリみたいなのあってもよさそうなんだけど。Commons Collectionみたいな。ていうかJDKの新し目のAPIにあったりして。