あの・・ Java で関数型っぽい書き方ができてしまいましたケド。


こんな関数用のインターフェース用意してあげて、

public interface F<R, T> {
    R apply(T t);
}                                                                                                   


シーケンスクラスをこんな感じで作ってあげて、foreacch で関数インターフェース取るようにして、

public class Seq<E> {
    private List<E> list = new ArrayList<>();

    public Seq(T... ts) { list.addAll(Arrays.asList(ts)); }
    public void print() { System.out.println(list); }
		
    public void foreach(F<E, E> f) {
        List<E> tmplist = new ArrayList<>(list.size());
        for(E e : list) tmplist.add(f.apply(e));
            list = tmplist;
        }
    }
}                                                                                                  


そぅすっと、こんな書き方ができます。

@Test public void test() {
    Seq<Integer> seq = new Seq<>(1, 2, 3);
		
    seq.foreach(                                                                                                                                        new F<Integer, Integer>(){public Integer apply
        (Integer a) { return a * 2; }
    });
    seq.print();
}


実行すると、

[2, 4, 6]

たしかに foreach で与えた関数が2倍されています。
こんな書き方ができるなんて知りませんでした。


なんて、答えはスクロールすると出てくるんですケド・・