Anhand eines Stroms von Grund- oder Objektwerten besteht die Aufgabe, ihn in einen Strom von Paaren umzuwandeln, aus denen jedes Paar besteht zwei aufeinanderfolgende Elemente aus dem ursprünglichen Stream. Bei gegebenem Stream {0, 1, 2, 3, 4} wäre die gewünschte Ausgabe beispielsweise:
{ new Pair(0, 1), new Pair(1, 2), new Pair(2, 3), new Pair(3, 4) }
Analyse
Die Java 8-Streams Die Bibliothek zeichnet sich durch die Aufteilung von Streams in kleinere Teile zur parallelen Verarbeitung aus. Es bietet jedoch begrenzte Unterstützung für zustandsbehaftete Pipeline-Stufen, was den Zugriff auf benachbarte Stream-Elemente und das Abrufen des Index des aktuellen Elements erschwert.
Lösung
Um diese zu überwinden Einschränkungen können wir einen indizierten Ansatz nutzen, bei dem wir den Stream mithilfe von Indizes steuern. Dies erfordert, dass die Werte in einer Datenstruktur mit wahlfreiem Zugriff wie einer ArrayList gespeichert werden, aus der Elemente bequem abgerufen werden können. Mit den Werten in einer ArrayList können wir die Paare wie folgt konstruieren:
IntStream.range(1, arrayList.size()) .mapToObj(i -> new Pair(arrayList.get(i-1), arrayList.get(i))) .forEach(System.out::println);
Beachten Sie, dass dieser Ansatz die Einschränkung hat, dass die Eingabe ein endlicher Stream sein muss. Die Pipeline kann jedoch parallel ausgeführt werden.
Das obige ist der detaillierte Inhalt vonWie kann man in Java effizient aufeinanderfolgende Paare aus einem Datenstrom erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!