1729 Stimmen

Wie funktioniert die Java-'for each'-Schleife?

Bedenken Sie:

List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList

for (String item : someList) {
    System.out.println(item);
}

Was wäre das Äquivalent for Schleife aussehen, ohne die Verwendung der für jede Syntax?

14voto

for (Iterator<String> itr = someList.iterator(); itr.hasNext(); ) {
   String item = itr.next();
   System.out.println(item);
}

12voto

billjamesdev Punkte 14314

Beachten Sie auch, dass die Verwendung der "foreach"-Methode in der ursprünglichen Frage einige Einschränkungen mit sich bringt, z. B. dass während der Iteration keine Elemente aus der Liste entfernt werden können.

Die neue for-Schleife ist einfacher zu lesen und macht einen separaten Iterator überflüssig, ist aber nur bei Nur-Lese-Iterationsdurchläufen wirklich brauchbar.

1 Stimmen

In diesen Fällen ist die Verwendung von removeIf könnte das richtige Werkzeug sein

10voto

Manohar Punkte 633

Es verschönert Ihren Code, indem es alle grundlegenden Schleifen entfernt. Es verleiht Ihrem Code ein sauberes Aussehen, wie unten begründet.

Normal for Schleife:

void cancelAll(Collection<TimerTask> list) {
    for (Iterator<TimerTask> i = list.iterator(); i.hasNext();)
         i.next().cancel();
}

Verwendung von for-each:

void cancelAll(Collection<TimerTask> list) {
    for (TimerTask t : list)
        t.cancel();
}

for-each ist ein Konstrukt über eine Sammlung, die Folgendes implementiert Iterator . Denken Sie daran, dass Ihre Sammlung Folgendes implementieren sollte Iterator ; sonst kann man es nicht mit for-each verwenden.

Die folgende Zeile wird gelesen als " für jede TimerTask t in der Liste. "

for (TimerTask t : list)

Bei der Verwendung von for-each ist die Wahrscheinlichkeit von Fehlern geringer. Sie müssen sich nicht um die Initialisierung des Iterators oder die Initialisierung des Schleifenzählers und die Beendigung der Schleife kümmern (hier besteht die Möglichkeit von Fehlern).

10voto

stackFan Punkte 1338

Vor Java 8 müssen Sie Folgendes verwenden:

Iterator<String> iterator = someList.iterator();

while (iterator.hasNext()) {
    String item = iterator.next();
    System.out.println(item);
}

Mit der Einführung von Streams in Java 8 können Sie jedoch dasselbe mit viel weniger Syntax tun. Zum Beispiel, für Ihre someList können Sie tun:

someList.stream().forEach(System.out::println);

Mehr über Streams finden Sie unter aquí .

0 Stimmen

The foreach loop, added in Java 5 (also called the "enhanced for loop"), is equivalent to using a java.util.Iterator

9voto

Pete Punkte 1505

Sie würde etwa so aussehen. Sehr schäbig.

for (Iterator<String> i = someList.iterator(); i.hasNext(); )
        System.out.println(i.next());

Es gibt einen guten Bericht über für jede im Dokumentation zur Sonne .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X