Skip to content

lists.forEach java使用forreach遍历时如何获取当前的索引

在 Java 中使用 List.forEach()Stream.forEach() 遍历时,默认无法直接获取当前元素的索引,因为 forEach 只接受一个 Consumer,不提供索引参数。

如果你需要索引,可以使用以下几种替代方式:

1. 使用传统的 for 循环(最直接)

java
for (int i = 0; i < list.size(); i++) {
    String item = list.get(i);
    System.out.println("索引:" + i + ",元素:" + item);
}

2. 使用 AtomicInteger 作为计数器(适合 forEach 风格)

java
AtomicInteger index = new AtomicInteger(0);
list.forEach(item -> {
    int i = index.getAndIncrement();
    System.out.println("索引:" + i + ",元素:" + item);
});

3. 使用 IntStream.range() 遍历索引

java
IntStream.range(0, list.size())
         .forEach(i -> {
             String item = list.get(i);
             System.out.println("索引:" + i + ",元素:" + item);
         });

4. 使用 ListIterator(同时支持反向遍历)

java
ListIterator<String> it = list.listIterator();
while (it.hasNext()) {
    int i = it.nextIndex();
    String item = it.next();
    System.out.println("索引:" + i + ",元素:" + item);
}

5. 使用外部数组(仅当集合是随机访问时有效)

java
Object[] array = list.toArray();
for (int i = 0; i < array.length; i++) {
    System.out.println("索引:" + i + ",元素:" + array[i]);
}

注意List.forEach 本身没有提供索引,因为它的设计目标是简洁地处理每个元素,不关心位置。如果需要索引,请根据场景选择上述方法。通常情况下,传统的 for 循环或 IntStream 方式最清晰且高效

耕书屋