Java - Iterieren über alle zwei Elemente in einer Liste

7

Was ist der beste Weg, um eine Liste zu durchlaufen, während zwei Elemente gleichzeitig verarbeitet werden?

Beispiel:

%Vor%

Ergebnisse in:

%Vor%

Ich möchte erreichen:

%Vor%     
stikkos 16.04.2013, 09:44
quelle

11 Antworten

11

Erhöhen Sie einfach i by 2:

%Vor%     
hyde 16.04.2013, 09:47
quelle
7

Sie müssen i für den zweiten Wert ändern und inkrementieren, ändern Sie die Anweisung:

%Vor%

bis

%Vor%

Dies erhöht auch i , da dies das gewünschte Verhalten zu sein scheint.

Also wäre Ihr Code:

%Vor%     
Habib 16.04.2013 09:45
quelle
5

Ich habe die folgende Methode mit einem Java8 BiConsumer erstellt:

%Vor%

benutze es so:

%Vor%

Dies wird ausgegeben:

%Vor%     
Benjamin M 20.08.2015 19:24
quelle
2

Was ist, wenn Sie bei jeder Iteration i um 2 erhöhen? Sollte tun ... Andernfalls erwägen Sie, i innerhalb der tatsächlichen Schleife zu erhöhen

    
Nidis 16.04.2013 09:47
quelle
2
%Vor%     
Cratylus 16.04.2013 09:48
quelle
1

Wir sollten natürlich eine Lösung für den allgemeinen Fall anbieten; -)

%Vor%     
forty-two 16.04.2013 10:18
quelle
0
%Vor%     
Subir Kumar Sao 16.04.2013 09:48
quelle
0
%Vor%     
Superboleta 16.04.2013 09:50
quelle
0

Für die Leistung empfehle ich Ihnen, die Größe der Liste nur einmal zu berechnen und keine neue Zeichenfolge bei jeder neuen Schleife zu erstellen.

%Vor%     
Lahniep 16.04.2013 09:57
quelle
0

Sie können die Indizierung mit einem Iterator vermeiden; Dies funktioniert für jedes Iterable , nicht nur eine Liste. Holen Sie sich einfach einen Iterator und inkrementieren Sie ihn zweimal pro Schleifeniteration:

%Vor%

Dies setzt eine Liste gerader Länge voraus und wirft NoSuchElementException auf den letzten Durchlauf, wenn es eine ungerade Länge hat. Sie können dies auf verschiedene Arten handhaben:

  • Verwende ein try - catch ;
  • habe eine Wächterklausel, die überprüft, ob die Länge vorher gleich ist;
  • überprüfe, bevor du das zweite Element bekommst.

Überprüfen des zweiten Elements:

%Vor%

Iteratoren verwirren einige Leute, so dass Sie auch eine for-each-Schleife mit einer Verzweigung und einer zusätzlichen Flip-Flop-Variablen für Parität verwenden können. Dies ist viel schlimmer, da es die Logik der Schleife viel komplizierter macht, um die Iteration zu vereinfachen: anstatt dass die Aktion einmal pro Durchgang durch die Schleife in Folge und ohne Verzweigung ausgeführt wird, muss man sie stattdessen zweimal durchlaufen und mental verzweigen. Beachten Sie, dass dies das letzte Element überspringt, wenn es eine ungerade Länge hat; könnte nachträglich eine Überprüfung von isFirst hinzufügen, wenn auch diese Fälle behandelt werden sollen.

%Vor%

Beachten Sie schließlich, dass all diese Iteratoren und Hilfsvariablen einen übermäßigen Geltungsbereich haben (sie sind nur für die Schleife selbst von Nutzen und belasten die lokale Umgebung): Sie könnten in Blöcke eingeschlossen werden, um den Bereich zu begrenzen, obwohl dies normalerweise der Fall ist Verschachtelung gilt als schlechter als der übermäßige Umfang:

%Vor%     
Nils von Barth 03.06.2015 05:28
quelle
0

Jetzt in Java 8, indem Ссылка

verwendet wird

Sie können schreiben:

%Vor%     
Stoneboy 03.08.2015 08:35
quelle

Tags und Links