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

前回の投稿、
oboe2uran.hatenablog.com

さらに、BiConsumer の処理にしてみます。

public static <T> void eachPrevious(List<T> list, BiConsumer<T, T> consumer){
    for(ListIterator<T> it = list.listIterator(); it.hasNext();) {
        T pre = null;
        if (it.hasPrevious()) {
            pre = it.previous();
            it.next();
        }
        consumer.accept(it.next(), pre);
    }
}

サンプル

List<String> list = List.of("A", "B", "C", "D");

eachPrevious(list, (t, u)->{
     // TODO リスト前の要素 u と、処理する
     System.out.println("cur="+t+ "  pre="+u);
});

結果

cur=A  pre=null
cur=B  pre=A
cur=C  pre=B
cur=D  pre=C

目的の処理が、BiConsumer で書きやすくなります。