Heim >Java >javaLernprogramm >Wie kann ich einen Java 8-Stream effizient durchlaufen und auf Indizes zugreifen?

Wie kann ich einen Java 8-Stream effizient durchlaufen und auf Indizes zugreifen?

Susan Sarandon
Susan SarandonOriginal
2024-12-27 12:10:10921Durchsuche

How Can I Efficiently Iterate Through a Java 8 Stream and Access Indices?

Effiziente Stream-Iteration mit Indizes in Java 8

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn