public static <T> Function<T, IndexedItem<T>> indexed() {
AtomicInteger count = new AtomicInteger();
return (t) -> new IndexedItem<T>(count.getAndIncrement(), t);
}
public static class IndexedItem<T> {
public final Integer index;
public final T item;
public IndexedItem(Integer index, T item) {
this.index = index;
this.item = item;
}
}Example Usage:
Arrays.asList("aaa", "bbb", "ccc").stream()
.map(indexed())
.forEach(o -> System.out.println(o.index + ":\t" + o.item));
Output:
0: aaa
1: bbb
2: ccc