有没有办法在 Java 的 for-each 循环中访问迭代计数器?

新手上路,请多包涵

Java的for-each循环有没有办法

for(String s : stringArray) {
  doSomethingWith(s);
}

找出循环处理的频率?

除了使用古老而著名的 for(int i=0; i < boundary; i++) 循环之外,是构造

int i = 0;
for(String s : stringArray) {
  doSomethingWith(s);
  i++;
}

在 for-each 循环中提供这样一个计数器的唯一方法是什么?

原文由 Kosi2801 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 472
2 个回答

没有,但您可以提供自己的柜台。

这样做的原因是 for-each 循环内部 没有 计数器;它基于 Iterable 接口,即它使用 Iterator 循环遍历“集合”——它可能根本不是一个集合,实际上可能根本不是基于索引的东西(比如作为链表)。

原文由 Michael Borgwardt 发布,翻译遵循 CC BY-SA 3.0 许可协议

还有另一种方法。

鉴于您编写了自己的 Index 类和一个返回 Iterable 的静态方法,您可以

for (Index<String> each: With.index(stringArray)) {
    each.value;
    each.index;
    ...
}

其中 With.index 的实施类似于

class With {
    public static <T> Iterable<Index<T>> index(final T[] array) {
        return new Iterable<Index<T>>() {
            public Iterator<Index<T>> iterator() {
                return new Iterator<Index<T>>() {
                    index = 0;
                    public boolean hasNext() { return index < array.size }
                    public Index<T> next() { return new Index(array[index], index++); }
                    ...
                }
            }
        }
    }
}

原文由 akuhn 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题