UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Java】ライブラリを使わず反復処理でインデックスを取得したい

JavaのVavrという関数型ライブラリを使っていたときに、反復処理でインデックスを使いたい場合はzipWithIndexというのを使っていた

uga-box.hatenablog.com

ただ、いまはVavrを使うのをやめており、使わないでインデックスが必要なときにどうするか調べた

このあたりが参考になった

www.baeldung.com

qiita.com

できれば、ライブラリを入れないでやるとすると、上の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で実行する

docs.oracle.com

他参考

https://qiita.com/opengl-8080/items/22c4405a38127ed86a31