Как получить текущий индекс цикла при использовании Iterator?

Я использую Iterator для итерации по коллекции и я хочу получить текущий индекс элемента.

Как я могу это сделать?

Ответ 1

Используйте свою собственную переменную и увеличивайте ее в цикле.

Ответ 2

У меня был такой же вопрос, и я нашел, как работает ListIterator. Аналогично вышеприведенному тесту:

List<String> list = Arrays.asList("zero", "one", "two");

ListIterator iter = list.listIterator();

while (iter.hasNext()) {
    System.out.println("index: " + iter.nextIndex() + " value: " + iter.next());
}

Убедитесь, что вы вызываете nextIndex ПЕРЕД тем, как вы фактически получаете следующий().

Ответ 3

Вот способ сделать это, используя вашу собственную переменную и сохраняя ее кратким:

List<String> list = Arrays.asList("zero", "one", "two");

int i = 0;
for (Iterator<String> it = list.iterator(); it.hasNext(); i++) {
    String s = it.next();
    System.out.println(i + ": " + s);
}

Выход (вы уже догадались):

0: zero
1: one
2: two

Преимущество заключается в том, что вы не увеличиваете свой индекс в цикле (хотя вам нужно быть осторожным, чтобы вызывать только один раз Iterator # один раз за цикл - просто сделайте это вверху).

Ответ 4

Вы можете использовать ListIterator для подсчета:

final List<String> list = Arrays.asList("zero", "one", "two", "three");

for (final ListIterator<String> it = list.listIterator(); it.hasNext();) {
    final String s = it.next();
    System.out.println(it.previousIndex() + ": " + s);
}

Ответ 5

Какая коллекция? Если это реализация интерфейса List, вы можете просто использовать it.nextIndex() - 1.

Ответ 6

Используйте ListIterator, чтобы перебирать коллекцию. Если коллекция не является списком для начала, используйте Arrays.asList(Collection.toArray()), чтобы сначала включить его в список.

Ответ 7

Используйте int и добавьте его в свой цикл.

Ответ 8

Смотрите здесь.

iterator.nextIndex() предоставит индекс элемента, который будет возвращен последующим вызовом next().

Ответ 9

Все, что вам нужно использовать iterator.nextIndex(), чтобы вернуть текущий индекс, в который включен итератор. Это может быть немного проще, чем использовать собственную переменную счетчика (которая все еще работает).

public static void main(String[] args) {    
    String[] str1 = {"list item 1", "list item 2", "list item 3", "list item 4"};
    List<String> list1 = new ArrayList<String>(Arrays.asList(str1));

    ListIterator<String> it = list1.listIterator();

    int x = 0;

    //The iterator.nextIndex() will return the index for you.
    while(it.hasNext()){
        int i = it.nextIndex();
        System.out.println(it.next() + " is at index" + i); 
    }
}

Этот код будет проходить через список1 по одному элементу за раз и печатать текст элемента, затем "находится в индексе", после чего он распечатает индекс, на который итератор нашел его.:)

Ответ 10

просто выполните что-то вроде этого:

for (AbstractDevice device : mDevicesList){
int curIndex = mDevicesList.indexOf(device));

            }