Streams in Java umkehren: generische und spezifische Ansätze
Beim Umgang mit Java-Streams kann es entscheidend sein, zu verstehen, wie man sie umkehrt. Lassen Sie uns in die spezifischen und allgemeinen Ansätze zum Umkehren von Streams eintauchen.
Spezifischer Ansatz: Umkehren eines IntStream
Um einen IntStream umzukehren und dabei seinen Bereich beizubehalten, können Sie Folgendes verwenden Ansatz:
<code class="java">static IntStream revRange(int from, int to) { return IntStream.range(from, to) .map(i -> to - i + from - 1); }</code>
Diese Methode vermeidet unnötige Box- und Sortiervorgänge.
Generischer Ansatz: Umkehren eines Streams jeglicher Art
Für Streams von Bei beliebigen Typen gibt es derzeit keine vordefinierte „richtige“ Möglichkeit, sie umzukehren. Hier sind jedoch zwei gängige Optionen:
1. Umkehren mit Array:
Diese Methode speichert die Stream-Elemente in einem Array und ruft sie in umgekehrter Reihenfolge ab:
<code class="java">@SuppressWarnings("unchecked") static <T> Stream<T> reverse(Stream<T> input) { Object[] temp = input.toArray(); return (Stream<T>) IntStream.range(0, temp.length) .mapToObj(i -> temp[temp.length - i - 1]); }</code>
2. Umkehren mit Collector:
Diese Methode verwendet einen Collector, um Elemente in einer umgekehrten Liste zu sammeln:
<code class="java">Stream<T> input = ... ; List<T> output = input.collect(ArrayList::new, (list, e) -> list.add(0, e), (list1, list2) -> list1.addAll(0, list2));</code>
Effiziente Umkehrung mit ArrayDeque
Aufgrund der Ineffizienz des O(N^2)-Kopierens aktualisieren wir unseren vorherigen Code mit einem ArrayDeque für eine effizientere Einfügung an der Vorderseite:
<code class="java">Deque<String> output = input.collect(Collector.of( ArrayDeque::new, (deq, t) -> deq.addFirst(t), (d1, d2) -> { d2.addAll(d1); return d2; }));</code>
Diese Methode erzeugt ein umgekehrtes Deque, das leicht konvertiert werden kann zurück in einen Stream oder direkt iteriert.
Das obige ist der detaillierte Inhalt vonSo kehren Sie Streams in Java um: Spezifische und generische Ansätze?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!