Heim >Java >javaLernprogramm >Wie kann ich einen Java 8-Stream mit Indexzugriff effizient durchlaufen?

Wie kann ich einen Java 8-Stream mit Indexzugriff effizient durchlaufen?

Susan Sarandon
Susan SarandonOriginal
2024-12-18 14:32:17537Durchsuche

How Can I Efficiently Iterate Through a Java 8 Stream with Index Access?

Präzise indexbasierte Stream-Iteration in Java 8

Viele Programmieraufgaben umfassen das Durchlaufen einer Datenstruktur und gleichzeitigen Zugriff auf den entsprechenden Index. Java 8-Streams bieten eine breite Palette von Operationen für die Stream-Verarbeitung, es gibt jedoch keine explizite Möglichkeit, den Index während der Iteration abzurufen.

Der bereitgestellte Java-Code zeigt einen ziemlich ausführlichen Ansatz mit IntStream, boxed(), zip( ), filter(), map() und Collect(). Während es das gewünschte Ergebnis erzielt, beeinträchtigen seine Länge und Komplexität seine Eleganz.

Sauberste Methode:

Der prägnanteste Ansatz besteht darin, von einem Strom von Indizes auszugehen:

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());

Diese Methode erstellt einen Strom von Indizes von 0 bis zur Länge des Arrays und filtert die Indizes basierend auf der Länge des entsprechenden Arrays string, ordnet die Indizes den entsprechenden Strings zu und sammelt die Ergebnisse in einer Liste.

Alternative Methode:

Eine andere Möglichkeit besteht darin, einen Ad-hoc-Indexzähler zu verwalten ein veränderliches Objekt wie ein AtomicInteger:

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());

Diese Methode bewahrt die Vertrautheit der For-Schleifen-basierten Indexerhöhung. Es ist jedoch zu beachten, dass die Verwendung dieser Methode in einem parallelen Stream aufgrund der nicht deterministischen Reihenfolge der Parallelverarbeitung möglicherweise zu fehlerhaftem Verhalten führen kann.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Java 8-Stream mit Indexzugriff effizient durchlaufen?. 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