Estoy usando un iterador para iterar a través de una colección y quiero obtener el índice del elemento actual.
¿Cómo puedo hacer eso?
Estoy usando un iterador para iterar a través de una colección y quiero obtener el índice del elemento actual.
¿Cómo puedo hacer eso?
Respuestas:
Use su propia variable e increméntela en el ciclo.
it.nextIndex()
. Útil cuando la colección es una Lista.
Tenía la misma pregunta y descubrí que usar un ListIterator funcionaba. Similar a la prueba anterior:
List<String> list = Arrays.asList("zero", "one", "two");
ListIterator iter = list.listIterator();
while (iter.hasNext()) {
System.out.println("index: " + iter.nextIndex() + " value: " + iter.next());
}
Asegúrese de llamar al nextIndex ANTES de obtener el next ().
Aquí hay una forma de hacerlo usando su propia variable y manteniéndola concisa:
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);
}
Salida (lo adivinaste):
0: zero
1: one
2: two
La ventaja es que no incrementas tu índice dentro del ciclo (aunque debes tener cuidado de llamar al Iterador # siguiente solo una vez por ciclo, solo hazlo en la parte superior).
asList("zero", "one", "two")
Puede usar ListIterator
para hacer el conteo:
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);
}
¿Qué tipo de colección? Si se trata de una implementación de la interfaz List, entonces podría usar it.nextIndex() - 1
.
Utilice un ListIterator para recorrer la colección. Si la colección no es una lista, para empezar, utilice Arrays.asList(Collection.toArray())
para convertirla en una lista primero.
solo haz algo como esto:
ListIterator<String> it = list1.listIterator();
int index = -1;
while (it.hasNext()) {
index++;
String value = it.next();
//At this point the index can be checked for the current element.
}
Use un int e increméntelo dentro de su ciclo.
Vea aquí .
iterator.nextIndex()
proporcionaría un índice de elemento que sería devuelto por una llamada posterior a next()
.
Todo lo que necesita para usarlo es el iterator.nextIndex () para devolver el índice actual en el que se encuentra el iterador. Esto podría ser un poco más fácil que usar su propia variable de contador (que también funciona).
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);
}
}
Este código pasará por la lista list1 un elemento a la vez e imprimirá el texto del elemento, luego "está en el índice" y luego imprimirá el índice en el que lo encontró el iterador. :)
Aunque ya tenía la respuesta, pensó en agregar algo de información.
Como mencionó Colecciones explícitamente, no puede usar listIterator
para obtener el índice para todos los tipos de colecciones.
Listar interfaces : ArrayList, LinkedList, Vector y Stack.
Tiene ambos iterator()
ylistIterator()
Establecer interfaces : HashSet, LinkedHashSet, TreeSet y EnumSet.
Sólo tiene iterator()
Interfaces de mapas : HashMap, LinkedHashMap, TreeMap e IdentityHashMap
No tiene iteradores, pero se puede iterar mediante keySet()
/ values()
o entrySet()
as keySet()
y entrySet()
devuelve Set
y values()
devuelveCollection
.
Por lo tanto, es mejor usarlo iterators()
con un incremento continuo de un valor para obtener el índice actual para cualquier tipo de colección.