Java,如何在“for each”循环中获取当前索引/键[重复]
Posted
技术标签:
【中文标题】Java,如何在“for each”循环中获取当前索引/键[重复]【英文标题】:Java, How do I get current index/key in "for each" loop [duplicate] 【发布时间】:2011-03-26 18:46:46 【问题描述】:在 Java 中,如何获取 Java 中元素的当前索引?
for (Element song: question)
song.currentIndex(); //<<want the current index.
在 php 中你可以这样做:
foreach ($arr as $index => $value)
echo "Key: $index; Value: $value";
【问题讨论】:
这个问题大约每月被问一次 在 PHP 中,您使用的关联数组不是 Java 数组的同义词。 Arrays.asList(question).indexOf(song) 【参考方案1】:你不能,你要么需要单独保存索引:
int index = 0;
for(Element song : question)
System.out.println("Current index is: " + (index++));
或使用普通的 for 循环:
for(int i = 0; i < question.length; i++)
System.out.println("Current index is: " + i);
原因是您可以使用精简的 for 语法来遍历任何 Iterable,并且不能保证这些值实际上具有“索引”
【讨论】:
这在语义上确实是正确的答案,因为每个循环都可以遍历来自远程数据库的流数据,当您迭代其内容时(如果使用的迭代器确实这样做),该远程数据库正在更新在这种情况下,无法知道当前索引。索引只是数据的视图,而不是数据的属性。 虽然它可能没有索引,但拥有某种可以在循环内访问的迭代计数器会非常方便。我想这样的事情很难在核心 java 中结束,一些脚本语言的机会更多。 正如我所担心的,也许在 Java 12 中他们会添加它作为一项值得骄傲的功能,就像他们最近对 lambdas 和使用单行读取文件所做的那样? (免责声明:我自己(主要)是一名 Java 程序员) @atas 距离 Java 12 近 2.5 年...如果您正在处理数组,该索引肯定是可用的,即它在堆栈上。如果有一个关键字可以编译为简单的“ILOAD 2”,那将是非常酷的。如果它是一个 List,它会编译成一个迭代器,它不能给你一个索引。【参考方案2】:在 Java 中,您不能,因为 foreach 旨在隐藏迭代器。您必须执行正常的 For 循环才能获得当前迭代。
【讨论】:
【参考方案3】:跟踪您的索引:这就是它在 Java 中的完成方式:
int index = 0;
for (Element song: question)
// Do whatever
index++;
【讨论】:
确实如此,但尽管我非常喜欢 Java5 中引入的增强型 for-each 循环,但提供您自己的索引不会破坏简单地使用传统 for-each 构造的目的吗?对于 Java 开发人员来说,使用 Java 内置的内容通常会更直观/更易读(但并非总是如此)。 7 年后......(哇,我简直不敢相信,时间过得真快),我同意你@MichaelM 100%。【参考方案4】:在 Java 中不可能。
这是 Scala 的方式:
val m = List(5, 4, 2, 89)
for((el, i) <- m.zipWithIndex)
println(el +" "+ i)
【讨论】:
整洁!另见***.com/questions/7167253/… 我也在想同样的事情。我也喜欢 javascript 语法:myArray.forEach((val, index) => console.log('VAL : ', val, 'INDEX : ', index) );
问题是关于 Java,而不是 JVM:抱歉,scala 超出了范围。【参考方案5】:
正如其他人指出的那样,“不可能直接”。 我猜你想要 Song 的某种索引键? 只需在 Element 中创建另一个字段(成员变量)。将歌曲添加到集合时增加它。
【讨论】:
【参考方案6】:我正在使用的当前代码示例:
int index=-1;
for (Policy rule : rules)
index++;
// do stuff here
让您从零索引开始,并在处理过程中递增。
【讨论】:
简单的麻烦。从零开始,最后实施。除非你在循环体中使用 continue。以上是关于Java,如何在“for each”循环中获取当前索引/键[重复]的主要内容,如果未能解决你的问题,请参考以下文章