java foreach pomiń pierwszą iterację
Czy istnieje elegancki sposób na pominięcie pierwszej iteracji w pętli Java5 foreach ?
Przykładowy pseudo-kod:
for ( Car car : cars ) {
//skip if first, do work for rest
.
.
}
10 answers
Nie nazwałbym tego eleganckim, ale może lepiej niż używanie" pierwszego " boolean:
for ( Car car : cars.subList( 1, cars.size() ) )
{
.
.
}
Poza tym, prawdopodobnie żadna elegancka metoda.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-26 09:30:09
Z nowym Java 8 Stream API staje się bardzo eleganckie. Wystarczy użyć metody skip()
:
cars.stream().skip(1) // and then operations on remaining cars
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-02 11:06:46
Użyj Guawy Iterables.skip()
.
Coś w stylu:
for ( Car car : Iterables.skip(cars, 1) ) {
// 1st element will be skipped
}
(dostałem to od końca odpowiedzi msandiforda i chciałem zrobić z tego samodzielną odpowiedź)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:25
for (Car car : cars)
{
if (car == cars[0]) continue;
...
}
Dla mnie wystarczająco Elegancka.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-19 00:14:17
Kod Seany ma mały błąd: drugi argument do sublist jest traktowany jako indeks Wyłączny, więc możemy po prostu napisać
for (Car car : cars.subList(1, cars.size()) {
...
}
(wydaje mi się, że nie jestem w stanie skomentować odpowiedzi, stąd Nowa odpowiedź. Czy potrzebuję do tego pewnej reputacji?)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-26 09:29:45
Trochę się na to spóźniłem, ale przydałaby się pomocna metoda, coś w stylu:
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;
}
};
}
I użyj czegoś takiego:
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);
}
}
Uogólnienie na pominięcie "n" jest pozostawione jako ćwiczenie dla czytelnika:)
EDIT: po bliższym przyjrzeniu się widzę, że guawa ma Iterables.skip(...)
tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-21 22:44:24
Nie jestem osobą Javy, ale można użyć:
for ( Car car : cars.tail() )
z Javy.util via Groovy JDK
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-18 23:52:07
Elegancki? Nie bardzo. Musisz sprawdzić / ustawić wartość logiczną.
Pętla for-each jest dla wszystkich praktycznych celów wymyślną składnią używającą iteratora. Lepiej po prostu użyć iteratora i posunąć się do przodu, zanim zaczniesz pętlę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-18 23:47:39
Nie tak eleganckie, ale praca z iteratorami
Iterator<XXXXX> rows = array.iterator();
if (rows.hasNext()){
rows.next();
}
for (; rows.hasNext();) {
XXXXX row = (XXXXX) rows.next();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-03 18:27:14
Może to nie być eleganckie, ale można zainicjować zmienną całkowitą poza pętlą for i zwiększyć ją przy każdej iteracji wewnątrz pętli. Twój program uruchomi się tylko wtedy, gdy licznik jest większy niż 0.
int counter = 0;
for ( Car car : cars ) {
//skip if first, do work for rest
if(counter>0){
//do something
}
counter++;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-17 09:34:57