Java 8 Streams: Wie vergleichen Sie aktuelle element mit dem nächsten element?
Wie man das nächste element aus einer List
mit Java-8-Streams?
Wenn ich mich Iteration über eine List
möchte ich einen Vergleich von aktuellen mit dem nächsten element der Liste.
Ist es machbar, die mit Java 8 Stream?
- Iterieren-wie? Wie bestimmen Sie den aktuellen und den nächsten Elementen? Warum fühlen Sie die Notwendigkeit, dies zu tun mit streams?
- Was ist Ihr Ziel?
- mein Ziel ist es den Vergleich von zwei aufeinanderfolgenden element in der Liste, oder vielleicht will ich überprüfen ob Sie gleich sind.
- Das ist eine Aufgabe, kein Ziel. Es muss einen Grund, warum Sie dies tun. E. g. Sie möchten etwas tun, wenn zwei Elemente gleich sind. Was interessant ist, wie zu tun, dass etwas mit streams. Die Frage ist, hat schon gefragt worden, in ähnlichen Formen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine freie StreamEx - Bibliothek ermöglicht es Ihnen, die Paare von der stream-Elemente mit zusätzlichen
pairMap
intermediate operation. Wie diese:Wo
input
ist einCollection
-, array-oderStream
. Zum Beispiel, auf diese Weise können Sie leicht überprüfen, ob die Eingabe sortiert ist:Gibt es auch
forPairs
terminal-Betrieb ist einforEach
analog zu allen Paaren von Eingabe-Elemente:Diese features funktionieren sehr gut mit jedem stream source (entweder random access oder nicht) gibt, und unterstützen uneingeschränkt die parallele streams.
Eine Möglichkeit ist das erzeugen einer
IntStream
der Indizes, und Holen Sie sich dasList
- Elementen anhand Ihres index. Dies ist nur dann effizient, wenn derList
unterstützt random-access - (d.h. wenn IhrList
ist einLinkedList
, es wäre eine schlechte Idee, dalist.get(i)
nicht Konstante Zeit).Beispiel :
Weitere Möglichkeit ist die Speicherung des letzten Elements in einem array :
Dies funktioniert nur für sequentielle streams.
Stream.reduzieren könnte verwendet werden, je nach Ziel. Als Sie sagte, Sie möchte den Vergleich von aufeinander folgenden Elementen, die folgende "print " 3":
Machen Sie immer eine der folgenden:
Implementierungen der beiden Lösungen kann man in diesem thread: Ist es möglich, das nächste element in den Stream???
Ich hatte das gleiche zu tun, und vergleichen Sie die Unterschiede der Elemente eines Streams (ursprünglich ein array).
So benutzte ich eine Methode, die als parameter der UnaryOperator, dass .map() erwartet als folgt...und es funktionierte für mich ohne Besondere gizmo:
Was schön wäre, ist zu wissen, wie die Methode calcMaxDiff entspricht einem UnaryIntOperator in der .anzeigen-Signatur. Das ist ein wenig über mich.
Hoffe, dies hilft Ihnen.
Wenn Sie hatte eine Liste von Integer-zahlen beispielsweise und wollte überprüfen, ob Sie aufsteigend sortiert, könnte man das wie folgt tun:
Diese vergleichen Paare wie: (0,1),(1,2),...