Есть ли способ получить доступ к счетчику итераций в цикле Java для каждого? - PullRequest
248 голосов
/ 25 января 2009

Есть ли способ в Java для каждого цикла

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?

Ответы [ 16 ]

1 голос
/ 14 июня 2016
int i = 0;
for(String s : stringArray) {
    doSomethingWith(s,i);
    ++i;
} 

Есть много способов, но метод один из способов

1 голос
/ 30 июня 2010

Есть вариант ответа pax ...; -)

int i = -1;
for(String s : stringArray) {
    doSomethingWith(s, ++i);
}
0 голосов
/ 19 февраля 2019

Вот пример того, как я это сделал. Это получает индекс для каждого цикла. Надеюсь это поможет.

public class CheckForEachLoop {

    public static void main(String[] args) {

        int[] myIntArray = new int[11];
        String[] months = new String[] { "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST",
                "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" };
        for (String s : months) {
            if (s == months[2]) { // location where you can change
            }

        }
        System.out.println(s); 


    }
}
0 голосов
/ 14 июня 2017

Для ситуаций, когда мне нужен индекс только изредка, как в предложении catch, я иногда буду использовать indexOf.

for(String s : stringArray) {
  try {
    doSomethingWith(s);
  } catch (Exception e) {
    LOGGER.warn("Had some kind of problem with string " +
      stringArray.indexOf(s) + ": " + s, e);
  }
}
0 голосов
/ 02 июня 2017

Я обнаружил, что использование простого цикла for с инкрементным индексом было наиболее эффективным и надежным решением, как было здесь написано: https://stackoverflow.com/a/3431543/2430549

0 голосов
/ 05 марта 2011

Я немного удивлен, что никто не предложил следующее (я признаю, что это ленивый подход ...); Если stringArray является каким-либо списком List, вы можете использовать что-то вроде stringArray.indexOf (S), чтобы вернуть значение для текущего счетчика.

Примечание: это предполагает, что элементы списка уникальны или что не имеет значения, являются ли они неуникальными (потому что в этом случае он вернет индекс первой найденной копии).

Бывают ситуации, когда этого будет достаточно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...