Java, How do I get current index/key in “for each” loop
在Java中,如何获取Java中元素的当前索引?
1 2 3
| for (Element song : question ){
song. currentIndex(); //<<want the current index.
} |
在PHP中你可以做到这一点:
1 2 3
| foreach ($arr as $index => $value) {
echo"Key: $index; Value: $value";
} |
- 这个问题一个月问一次
- 在PHP中,您使用的是一个关联数组,它不是Java数组的同义词。
你不能,你也需要分开保存索引:
1 2 3 4
| int index = 0;
for(Element song : question ) {
System. out. println("Current index is:" + (index ++));
} |
或者使用普通for循环:
1 2 3
| for(int i = 0; i < question. length; i ++) {
System. out. println("Current index is:" + i );
} |
原因是您可以使用condensed for语法来循环任何iterable,并且不能保证值实际上有一个"index"
- 从语义上来说,这确实是正确的答案,因为每个循环都可以迭代来自远程数据库的流数据,而在迭代其内容时(如果使用的迭代器确实这样做了),正在更新该数据库,在这种情况下,无法知道当前索引。索引只是数据的视图,而不是数据的属性。
- 虽然它可能不是索引,但是拥有某种迭代计数器是非常方便的,您可以在循环中访问它。我猜想这样的事情很难在核心Java中结束,更多的脚本语言的机会。
- 正如我所担心的,也许在Java 12中,他们将添加它作为一个值得骄傲的特性,就像他们最近对LAMBDAS所做的那样,并且读取带有一个内衬的文件。(免责声明:我本人(大部分是我自己的Java程序员)
- ATAS 2.5年接近Java 12…如果您处理的是一个数组,那么索引绝对是可用的,即它在堆栈上。如果有一个关键字可以编译成一个简单的"iload 2",那就太酷了。如果它是一个列表,它会编译为迭代器,迭代器将无法为您提供索引。
1 2 3
| for (Song s : songList ){
System. out. println(s +"," + songList. indexOf(s );
} |
在链表中是可能的。
您必须在Song类中生成toString()。如果你不这样做,它会打印出这首歌的参考资料。
现在可能和你无关。^ ^ ^
- 丑陋的黑客
- 正如人们在stackoverflow.com/a/5200217上所评论的那样,如果存在重复的元素,那么这是错误的,并且速度很慢。
- 可怕,可怕,可怕。请不要这样做。
- 一个错误的解决方案,index of返回第一个匹配元素的索引,因此如果有多个匹配元素,即使循环在第二个元素中,它也将返回第一个元素的索引。
在爪哇,你不能,正如前文的目的是隐藏迭代器。为了获得当前迭代,必须对循环进行正常操作。
跟踪你的索引:Java就是这样做的:
1 2 3 4 5
| int index = 0;
for (Element song : question ){
// Do whatever
index ++;
} |
- 这是真的,但是尽管我非常喜欢Java5中引入的增强的for each循环,但是提供您自己的索引并没有破坏简单地为每个构造使用传统索引的目的吗?使用Java中构建的内容通常对Java开发人员来说是更直观的(虽然并不总是如此)。
- 7年后…(哇,真不敢相信,光阴似箭),我完全同意你的看法。
在Java中是不可能的。
这是斯卡拉的方法:
1 2 3 4
| val m = List(5, 4, 2, 89)
for((el, i ) <- m. zipWithIndex)
println (el +""+ i ) |
- 整洁!参见StopExoal.com /问题/ 7167253 / & Helip;
- 我也在想同样的事情。我也喜欢javascript语法:myArray.forEach((val, index) => console.log('VAL : ', val, 'INDEX : ', index) );。
正如其他人指出的,"不可能直接实现"。我猜你想要某种歌曲索引键?只需在元素中创建另一个字段(成员变量)。将歌曲添加到收藏集时将其递增。
我使用的当前代码示例:
1 2 3 4 5 6
| int index =-1;
for (Policy rule : rules )
{
index ++;
// do stuff here
} |
允许您从零索引开始,并在处理过程中递增。
- 很麻烦。从零开始,到最后执行。除非在循环体中使用continue。