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?

20voto

oneConsciousness Punkte 300

Das Konzept einer foreach-Schleife, wie es in Wikipedia erwähnt wird, wird unten hervorgehoben:

Im Gegensatz zu anderen for-Schleifenkonstrukten sind foreach-Schleifen jedoch normalerweise beibehalten. kein expliziter Zähler sie sagen im Wesentlichen "mach das mit alles in dieser Menge", anstatt "mach das x-mal". Dies vermeidet mögliche eindeutige Fehler und macht den Code einfacher zu lesen.

Das Konzept einer foreach-Schleife beschreibt also, dass die Schleife keinen expliziten Zähler verwendet, was bedeutet, dass keine Indizes verwendet werden müssen, um die Liste zu durchlaufen, wodurch der Benutzer vor einem Off-by-One-Fehler bewahrt wird. Um das allgemeine Konzept dieses "off-by-one"-Fehlers zu beschreiben, nehmen wir ein Beispiel für eine Schleife, die eine Liste mit Indizes durchläuft.

// In this loop it is assumed that the list starts with index 0
for(int i=0; i<list.length; i++){

}

Aber nehmen wir an, wenn die Liste mit Index 1 beginnt, dann wird diese Schleife eine Ausnahme auslösen, da kein Element bei Index 0 gefunden wird, und dieser Fehler wird Off-by-one-Fehler genannt. Um diesen "off-by-one"-Fehler zu vermeiden, wird das Konzept der foreach-Schleife verwendet. Es mag noch weitere Vorteile geben, aber dies ist meiner Meinung nach das Hauptkonzept und der Vorteil der foreach-Schleife.

0 Stimmen

Was bedeutet das für die Beantwortung der Frage? "Wie würde die entsprechende for-Schleife ohne die for each-Syntax aussehen?"

19voto

vivekkurien Punkte 1444

In Java 8 wurde forEach eingeführt. Mit List können Maps in einer Schleife dargestellt werden.

Schleife einer Liste mit for each

List<String> someList = new ArrayList<String>();
someList.add("A");
someList.add("B");
someList.add("C");

someList.forEach(listItem -> System.out.println(listItem))

oder

someList.forEach(listItem-> {
     System.out.println(listItem); 
});

Schleife einer Karte mit for each

Map<String, String> mapList = new HashMap<>();
    mapList.put("Key1", "Value1");
    mapList.put("Key2", "Value2");
    mapList.put("Key3", "Value3");

mapList.forEach((key,value)->System.out.println("Key: " + key + " Value : " + value));

oder

mapList.forEach((key,value)->{
    System.out.println("Key : " + key + " Value : " + value);
});

15voto

Hank Punkte 2887

Hier ist ein entsprechender Ausdruck.

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

15voto

Eine Alternative zu forEach, um Ihr "for each" zu vermeiden:

List<String> someList = new ArrayList<String>();

Variante 1 (einfach):

someList.stream().forEach(listItem -> {
    System.out.println(listItem);
});

Variante 2 (parallele Ausführung (schneller)):

someList.parallelStream().forEach(listItem -> {
    System.out.println(listItem);
});

2 Stimmen

Ich hätte erwähnen sollen, dass dies in Java 1.8 hinzugefügt wurde.

0 Stimmen

Wir können nicht 100%ig sicher sein, dass derselbe Faden verwendet wird. Ich verwende gerne die for( Formular, wenn ich sicherstellen möchte, dass derselbe Faden verwendet wird. Ich verwende gerne die Stream-Form, wenn ich eine Multithread-Ausführung zulassen möchte.

15voto

Dulith De Costa Punkte 9549

Verwendung älterer Java-Versionen, einschließlich Java 7 können Sie eine foreach Schleife wie folgt.

List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");

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

Im Folgenden wird die neueste Art der Verwendung eines für jede Schleife in Java 8 (Schleife eine Liste mit forEach + Lambda-Ausdruck oder Methodenreferenz).

Lambda

// Output: A,B,C,D,E
items.forEach(item->System.out.println(item));

Referenz der Methode

// Output: A,B,C,D,E
items.forEach(System.out::println);

Weitere Informationen finden Sie unter " Java 8 forEach Beispiele " .

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