Stream でインデックスを求める

リストに存在するオブジェクトが何番目=インデックスを求める方法、Java8 Stream で求める。


見つからない場合は、-1 が返れば良しとする。という要求で、サンプルを書くと。。。

List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f");

/* このリストで、"c" のインデックスを求める。 */

int index = IntStream.range(0, list.size()).filter(i->list.get(i).equals("c")).findAny().orElse(-1);


System.out.println("Index = " + index );

結果は、

Index = 2

になる。

ちょっとこの方法が気に入らなくなったので、Integer 型で、見つからない場合は、null というルールで書き直す。

AtomicInteger atomicInt = new AtomicInteger(-1);

Integer index = list.stream().peek(e->atomicInt.incrementAndGet())
  .filter(e->e.equals("c")).findFirst().map(e->atomicInt.get()).orElse(null);

peek メソッドは前から何につかえばよいのだろうと思っていたが、こういう時に使うといいみたいだ。