Java增强了for循环

oym*_*oym 12 java foreach for-loop

目前(从Java 6开始),使用Java的增强型for循环我不知道如何直接访问迭代器索引,而不是恢复到旧的索引for循环或使用外部计数器.

有没有计划(或者当前的方法)来实现这个"增强的增强"for循环,其中一个人能够访问循环的索引(甚至可能操纵它)?

作为可能需要这样做的示例,请考虑(这是来自实际的生产代码):

int i = 1;
for (final String action : actions) {
  parameters.set(String.valueOf(i++), action);
}
Run Code Online (Sandbox Code Playgroud)

Yuv*_*dam 15

好吧,就像你说的,如果你必须有索引只需使用标准for循环,或手动更新计数器.

但重新考虑你的问题.为什么在for (Object o : list)循环中需要索引?

整点使用增强环路的是抽象掉使用索引或迭代器的肮脏部分.

今天的大多数语言都没有在循环中提供这种功能.举个例子,Pythonic的方法是:

for index, val in enumerate(someList):
    # ....
Run Code Online (Sandbox Code Playgroud)


Boz*_*zho 7

不.使用外部变量.

  • +1 简单直接。此外,由于有关 Collection.get(i) 实现特定时间复杂性的各种原因,仅将计数器添加到增强的 for 循环体可能是最好的选择。与之前建议的恢复到传统的 for(statement;condition;statement) 循环结构相反。 (2认同)

Jus*_*ner 6

为什么他们需要提供另一种通过索引访问元素的方法?

当您不需要元素的索引时,会创建增强的for循环作为快捷方式.它精简了一切.

如果仍然需要索引,则回退到常规for循环.这是他们在那里的原因之一.