Heim >Java >javaLernprogramm >Wie kann ich einen Java 8-Stream effizient durchlaufen und auf Indizes zugreifen?
Einführung
Der Zugriff auf Indizes während der Iteration über Streams in Java 8 kann sein eine mühsame Aufgabe, insbesondere im Vergleich zu seinem LINQ-Gegenstück. In diesem Artikel werden prägnante und effiziente Möglichkeiten zur Erreichung dieser Funktionalität untersucht.
Die Zwischenlösung
Ein Ansatz besteht darin, einen Strom von Indizes mit dem Strom von Elementen zu kombinieren, indem wir die verwenden zip-Methode. Allerdings wurde diese Methode entweder verschoben oder entfernt, wodurch dieser Ansatz weniger zugänglich ist.
Der sauberste Weg: Aus Indizes
Eine schlankere Lösung besteht darin, mit a zu beginnen Strom von Indizes. Dies kann mit IntStream.range() erreicht werden und bietet einen praktischen Ausgangspunkt für Filter- und Zuordnungsvorgänge:
String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"}; IntStream.range(0, names.length) .filter(i -> names[i].length() <= i) .mapToObj(i -> names[i]) .collect(Collectors.toList());
Verwendung eines veränderlichen Index
Eine weitere Alternative ist um einen Ad-hoc-Zähler mithilfe eines veränderlichen Objekts wie einer AtomicInteger zu verwalten. Dieser Ansatz ähnelt herkömmlichen For-Schleifen:
String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"}; AtomicInteger index = new AtomicInteger(); List<String> list = Arrays.stream(names) .filter(n -> n.length() <= index.incrementAndGet()) .collect(Collectors.toList());
Vorsicht bei parallelen Streams
Es ist wichtig zu beachten, dass die Verwendung dieser letzteren Methode bei parallelen Streams zu Problemen wie Elementen führen kann kann möglicherweise nicht in der richtigen Reihenfolge bearbeitet werden.
Das obige ist der detaillierte Inhalt vonWie kann ich einen Java 8-Stream effizient durchlaufen und auf Indizes zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!