Jeder liebt Stream API, Schleifen wie das Schreiben in eine erweiterte for-Anweisung sind sauber. Ich weiß nicht, was ich mit einer Schleife machen soll, die auf den Index innerhalb der Schleife verweisen möchte. (Es gibt eine Möglichkeit, eine eigene Klasse zu erstellen, auch wenn Sie herumgehen: durchhalten :)
Also drehte ich meinen Kopf ein wenig.
Die folgenden Fälle werden als "Schleifen angenommen, die auf den Index innerhalb der Schleife verweisen möchten".
――Ich möchte zwei oder mehr Listen zusammen drehen
(Weil Sie sich auf "i" beziehen und Ihren Lieblingsprozess schreiben können Es kann auch in Fällen wie "Ich möchte die Verarbeitung am Anfang / Ende der Liste ändern" verwendet werden. Ich finde es nicht sehr schön. )
Unten finden Sie ein Codebeispiel.
public static void main(String[] args) {
//Geeignete Liste aus Zufallszahlen
List<Integer> listA = new ArrayList<>(Arrays.asList(12, 23, 66, 45, 10, 48, 21, 25, 68, 65));
List<Integer> listB = new ArrayList<>(Arrays.asList(98, 96, 4, 33, 30, 38, 39, 25, 32, 64));
//Fall 1: Wenn Sie zwei Listen zusammen bearbeiten möchten
List<Boolean> isWinnerA = IntStream.range(0, Math.min(listA.size(), listB.size()))
.mapToObj(i -> listA.get(i) > listB.get(i))
.collect(Collectors.toList());
System.out.println("isWinnerAList: " + isWinnerAList);
// -> isWinnerA: [false, false, true, true, false, true, false, false, true, true]
//Fall 2: Wenn Sie die Vorder- und Rückseite der Liste gemeinsam behandeln möchten
List<Double> movingAverage = IntStream.range(0, listA.size() - 1)
.mapToObj(i -> (listA.get(i) + listA.get(i + 1)) / 2d)
.collect(Collectors.toList());
System.out.println("movingAverage: " + movingAverage);
// -> movingAverage: [17.5, 44.5, 55.5, 27.5, 29.0, 34.5, 23.0, 46.5, 66.5]
}
Als Komposition
--for (int i; i <list.size (); i ++)
part
--Erstellen Sie mit der Factory-Methode von "IntStream"
generate (s)
zu tunmapToObj (/ * Konvertierungsprozess * /) .collect (/ * Aggregatprozess * /);
forEach ()
verwenden.Pro: Sie können nur mit den Standard schreiben con: Stream Sie können verwirrt sein, wenn Sie nicht daran gewöhnt sind
Wird gesagt, dass es besser ist, normalerweise einen for-Satz zu schreiben? Nun, wenn es das im Beispiel verwendete ist, kann es für Dokumente normal sein, aber kann es in Fällen wie "filter ()", Aggregationsverarbeitung und Stream-Funktionen verwendet werden? Ich denke.