java - programacion - Obtenga el índice actual de a para cada bucle iterando un ArrayList
manual de programacion android pdf (6)
Estoy iterando una ArrayList
utilizando la para cada bucle, pero no sé cómo obtener el índice actual donde está el bucle.
Lo hice en Google, pero no pude encontrar nada útil.
Por favor, si alguien podría decirme cómo obtener el índice actual, se lo agradeceré.
Para robar, las perillas de las puertas responden pero hacen un cambio que de otra manera me volvería loco como un pirata:
int arraySize = yourArrayList.size();
for (int i = 0; i < arraySize; i ++) {
// i is the index
// yourArrayList.get(i) is the element
}
alternativamente
int currentPosition = 0;
for (myItemType myItem :myArrayList) {
// do stuff
currentPosition++;
}
Puede usar list.indexOf(objectYouWantToFind);
para obtener su índice, si está en el contenedor, de lo contrario recibirá -1
como resultado.
Si está iterando una lista, puede usar el método indexOf (), ejemplo:
List<Animal> animals = new ArrayList<Animal>();
Animal a = new Animal();
a.setAnimalCode(1);
animals.add(a);
a = new Animal();
a.setAnimalCode(35);
animals.add(a);
a = new Animal();
a.setAnimalCode(12);
animals.add(a);
for(Animal a: animals)
if(animal.getAnimalCode()==35)
System.out.println("Index of chosen one: "+animals.indexOf(a));
Índice del elegido: 2
Solo usa un loop tradicional para:
for (int i = 0; i < yourArrayList.size(); i ++) {
// i is the index
// yourArrayList.get(i) is the element
}
Una especie de hack, pero seguramente puedes tener un índice en cada bucle:
public class Counter{
private Integer i;
public Counter(Integer i) { this.i = i; }
public void incrementOne(){ this.i = getI() + 1; }
//getter and setter for i
}
Y, en otro lugar en tu para cada bucle:
Alien.java
Counter counter = new Counter(0);
List<String> list = new ArrayList<>();
//have some values in the list
list.forEach(i-> {
//i will have the value and the counter will have the count!
System.out.println(counter.getI());
counter.incrementOne();
});
De lo contrario, siempre tiene un list.indexOf (i), donde i es cada objeto en la lista. :PAG
Utilice un bucle tradicional. Para cada una de las declaraciones en java no se promete una orden sobre la colección. La única forma de conocer realmente el índice es consultar la lista en cada iteración.
for(int i=0; i<list.size; i++){
// you have your index, i
// the item is at list.get(i)
}
Dependiendo de la implementación del iterador () también puede usar una alternativa (+1 Zak en los comentarios):
int position = 0;
for(Item i : list){
// do stuff with `i`
// increase position as the last action in the loop
position++;
}
De los documentos: Iterator<E> iterator() Returns an iterator over the elements in this list in proper sequence
Aquí es por qué generalmente no uso la forma corta de:
import java.util.ArrayList;
import java.util.Iterator;
public class MyList<T> extends ArrayList<T> {
// the main function to run the example
public static void main(String[] args){
// make a list of my special type
MyList<Integer> list = new MyList<Integer>();
// add 10 items to it
for (int i =0; i<10; i++){
list.add(i);
}
// print the list using the for-each mechanism (it''s actually an iterator...)
for (Integer i : list){
System.out.println(i);
}
}
// I like lists that start at 3!
// make my list return an iterator in the middle of the list...
@Override
public Iterator<T> iterator(){
return this.listIterator(3);
}
}
Obviamente, usted esperaría tener el primer elemento en la primera iteración, y este claramente no es el caso porque un iterador se puede implementar de muchas maneras y el foreach
de Java depende de la implementación del iterator
subyacente.
Además, tiene que usar la position++
al final de su bucle, que probablemente sea propenso a errores (no sé, normalmente no lo use ...).
Dicho esto, sí mejora la legibilidad como se menciona en esta question sobre foreach de Java.
Para obtener más información, consulte question .