リスト要素の前方を参照する処理(3)

oboe2uran.hatenablog.com

これを、先頭だけ Consumer にして、BiConsumer if 文を書く必要をなくす。

public static <T> void eachPrevious(List<T> list, Consumer<T> first, BiConsumer<T, T> consumer){
    ListIterator<T> it = list.listIterator();
    first.accept(it.next());
    while(it.hasNext()) {
        T pre = it.previous();
        it.next();
        consumer.accept(it.next(), pre);
    }
}
List<String> list = List.of("A", "B", "C", "D");
eachPrevious(list, t->{
    System.out.println("first : "+t);
}, (t, u)->{
    System.out.println("cur="+t+ "  pre="+u);
});

結果は、、

first : A
cur=B  pre=A
cur=C  pre=B
cur=D  pre=C