Java, Как получить текущий индекс/ключ в цикле "для каждого"

В Java, как мне получить текущий индекс для элемента в Java?

for (Element song: question){
    song.currentIndex();         //<<want the current index.
}

В PHP вы можете сделать это:

foreach ($arr as $index => $value) {
    echo "Key: $index; Value: $value";
}

Ответ 1

Вы не можете, вам нужно либо сохранить индекс отдельно:

int index = 0;
for(Element song : question) {
    System.out.println("Current index is: " + (index++));
}

или используйте обычный цикл:

for(int i = 0; i < question.length; i++) {
    System.out.println("Current index is: " + i);
}

Причина заключается в том, что вы можете использовать сжатый для синтаксиса цикл для любого Iterable, и это не гарантирует, что значения фактически имеют "индекс"

Ответ 2

for (Song s: songList){
    System.out.println(s + "," + songList.indexOf(s); 
}

это возможно в связанном списке.

вам нужно сделать toString() в классе песни. если вы этого не сделаете, будет распечатываться ссылка на песню.

вероятно, к вам не относится. ^ _ ^

Ответ 3

В Java вы не можете, поскольку foreach предназначался для скрыть итератор. Вы должны сделать нормальный цикл For, чтобы получить текущую итерацию.

Ответ 4

Следите за своим индексом: как это делается в Java:

 int index = 0;
    for (Element song: question){
        // Do whatever
         index++;
    }

Ответ 5

Невозможно в Java.


Здесь Scala способ:

val m = List(5, 4, 2, 89)

for((el, i) <- m.zipWithIndex)
  println(el +" "+ i)

Ответ 6

Как указывали другие, "невозможно напрямую". Я предполагаю, что вы хотите какой-то индексный ключ для песни? Просто создайте другое поле (переменную-член) в элементе. Увеличьте его при добавлении песни в коллекцию.

Ответ 7

Пример из текущего кода, с которым я работаю:

int index=-1;
for (Policy rule : rules)
{   
     index++;
     // do stuff here
}

Позволяет вам начать с нуля с индексом нуля и приращения при его обработке.