JavaのVavrという関数型ライブラリを使っていたときに、反復処理でインデックスを使いたい場合はzipWithIndex
というのを使っていた
ただ、いまはVavrを使うのをやめており、使わないでインデックスが必要なときにどうするか調べた
このあたりが参考になった
できれば、ライブラリを入れないでやるとすると、上のQiitaの記事で紹介されていた以下の方法がよさそう
public class With { public static <T> Consumer<T> Index(int start, ObjIntConsumer<T> consumer) { int counter[] = { start }; return obj -> consumer.accept(obj, counter[0]++); } }
java.util.stream.Stream.of("a", "b", "c", "d").forEach(With.Index(1, (s, i) -> System.out.println(i + ": " + s)));
ここで使われているObjIntConsumerはオブジェクト値とint値の引数を受け取って結果を返さないオペレーションで、consumer.accept
で実行する