studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java arraylist foreach indexing

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 .