Я использую Iterator для итерации по коллекции и я хочу получить текущий индекс элемента.
Как я могу это сделать?
Я использую Iterator для итерации по коллекции и я хочу получить текущий индекс элемента.
Как я могу это сделать?
Используйте свою собственную переменную и увеличивайте ее в цикле.
У меня был такой же вопрос, и я нашел, как работает 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 ПЕРЕД тем, как вы фактически получаете следующий().
Вот способ сделать это, используя вашу собственную переменную и сохраняя ее кратким:
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 # один раз за цикл - просто сделайте это вверху).
Вы можете использовать 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);
}
Какая коллекция? Если это реализация интерфейса List, вы можете просто использовать it.nextIndex() - 1
.
Используйте ListIterator, чтобы перебирать коллекцию. Если коллекция не является списком для начала, используйте Arrays.asList(Collection.toArray())
, чтобы сначала включить его в список.
Используйте int и добавьте его в свой цикл.
Смотрите здесь.
iterator.nextIndex()
предоставит индекс элемента, который будет возвращен последующим вызовом next()
.
Все, что вам нужно использовать 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 по одному элементу за раз и печатать текст элемента, затем "находится в индексе", после чего он распечатает индекс, на который итератор нашел его.:)
просто выполните что-то вроде этого:
for (AbstractDevice device : mDevicesList){
int curIndex = mDevicesList.indexOf(device));
}