for java foreach iteration skip

java foreach omita la primera iteración



for each java list (10)

¿Elegante? Realmente no. Debería verificar / establecer un booleano.

El bucle for-each es para todos los fines prácticos sintaxis sofisticada para usar un iterador. Es mejor que solo uses un iterador y avances antes de comenzar tu ciclo.

¿Existe alguna forma elegante de omitir la primera iteración en un ciclo forense Java5?

Ejemplo de pseudo-código:

for ( Car car : cars ) { //skip if first, do work for rest . . }


Con la nueva Java 8 Stream API, en realidad se vuelve muy elegante. Solo usa el método skip() :

cars.stream().skip(1) // and then operations on remaining cars


El código de SeanA tiene un pequeño error: el segundo argumento para sublistar se trata como un índice exclusivo, por lo que solo podemos escribir

for (Car car : cars.subList(1, cars.size()) { ... }

(Parece que no puedo comentar las respuestas, de ahí la nueva respuesta. ¿Necesito cierta reputación para hacer eso?)


Esto podría no ser elegante, pero se podría inicializar una variable entera fuera del ciclo for e incrementarla con cada iteración dentro del ciclo. Su programa solo se ejecutará si el contador es mayor que 0.

int counter = 0; for ( Car car : cars ) { //skip if first, do work for rest if(counter>0){ //do something } counter++; }


Llegué un poco tarde a esto, pero podrías usar un método de ayuda, algo así como:

public static <T> Iterable<T> skipFirst(final Iterable<T> c) { return new Iterable<T>() { @Override public Iterator<T> iterator() { Iterator<T> i = c.iterator(); i.next(); return i; } }; }

Y utilízalo de la siguiente manera:

public static void main(String[] args) { Collection<Integer> c = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); for (Integer n : skipFirst(c)) { System.out.println(n); } }

Generalizar para omitir "n" se deja como un ejercicio para el lector :)

EDITAR : En una inspección más cercana, veo que la guayaba tiene un Iterables.skip(...) here .


No es tan elegante, pero funciona con iteradores

Iterator<XXXXX> rows = array.iterator(); if (rows.hasNext()){ rows.next(); } for (; rows.hasNext();) { XXXXX row = (XXXXX) rows.next(); }


No lo llamaría elegante, pero tal vez sea mejor que usar un "primer" booleano:

for ( Car car : cars.subList( 1, cars.size() ) ) { . . }

Aparte de eso, probablemente no sea un método elegante.


No soy una persona de Java pero puedes usar:

for ( Car car : cars.tail() ) desde java.util a través de Groovy JDK


Utilice Guava Iterables.skip() .

Algo como:

for ( Car car : Iterables.skip(cars, 1) ) { // 1st element will be skipped }

( Entendí esto desde el final de la respuesta de msandiford y quería que fuera una respuesta independiente)


for (Car car : cars) { if (car == cars[0]) continue; ... }

Lo suficientemente elegante para mí.