Liste der Java-Streaming-Arrays und Vergleich mit dem vorherigen Datensatz
php-Editor Yuzai präsentiert Ihnen diese Ausgabe von Java Q&A, in der erörtert wird, wie Sie mithilfe von Streaming Array-Listen in Java verarbeiten und mit früheren Datensätzen vergleichen können. In diesem Artikel erfahren Sie, wie Sie die Streaming-Funktionen von Java nutzen, um Array-Listen effizient zu bearbeiten und sie mit früheren Datensätzen zu vergleichen. Lassen Sie uns tiefer in dieses Thema eintauchen und Ihr Verständnis und Ihre Fähigkeiten in der Java-Programmierung verbessern.
Frageninhalt
Ich habe eine einfache Recorda-Klasse, die eine ID und einen Int-Wert enthält. Mehrere „sortierte“ Recorda-Elemente werden in einer Liste gespeichert.
Ich möchte eine Liste durchlaufen, das aktuelle Element mit dem vorherigen Element vergleichen und den Unterschied in ihren Werten ermitteln.
Code:
import java.util.*; class RecordA{ Integer id; Integer value; RecordA(Integer id, Integer value) { this.id = id; this.value = value; } Integer getId() { return id;} Integer getValue() { return value;} } class RecordB { Integer id; Integer value; Integer diff; RecordB(Integer id, Integer value, Integer diff) { this.id = id; this.value = value; this.diff = diff; } Integer getId() { return id;} Integer getValue() { return value;} Integer getDiff() { return diff;} } class HelloWorld { public static void main(String[] args) { List<RecordA> listA = new ArrayList<>(); RecordA recordA1 = new RecordA(1,10); listA.add(recordA1); RecordA recordA2 = new RecordA(2,15); listA.add(recordA2); RecordA recordA3 = new RecordA(3,25); listA.add(recordA3); RecordA recordA4 = new RecordA(4,30); listA.add(recordA4); System.out.println(listA.size()); } }
Ich möchte den aktuellen „recorda.value“ mit dem vorherigen „recorda.value“ mithilfe eines Streams vergleichen (wenn möglich) und das Ergebnis in einen „recordb“ mit derselben ID und demselben Wert abbilden, aber den aktuell-vorherigen speichern.
Schließlich enthält die Datensatzliste
- 1, 10, 0 //(10-0)
- 2, 15, 5 //(15-10)
- 3, 25, 10 //25-15
- 4, 30, 5 //30-25
Ich möchte die Klasse für die Schleife und die Variable previous_val vermeiden. Irgendwelche Ideen, wie man das mit Streams machen kann?
Workaround
Sie können Intstream verwenden
intstream.range(0, lista.size()) .map(index -> new recordb(lista.get(index).getid(), lista.get(index).getvalue(), lista.get(index).getvalue() - (index > 0 ? lista.get(index - 1).getvalue() : 0)) ) .collect(collectors.tolist())
Dies ist eine etwas unintuitive Methode und ich musste sie tatsächlich nachschlagen.
StackOverflow – Java-Stream mit vorherigem Element in Foreach Lambda.
Normalerweise dient die Verwendung von Streams dazu, eine Reihe von Werten zu aggregieren und nicht unbedingt dazu, sie zu vergleichen und gegenüberzustellen.
Lektion: Aggregatoperationen (Die Java™-Tutorials > Sammlungen).
Dies ist ein Beispiel für die Verwendung der Klasse Collector und der Methode Collector#of.
Im Wesentlichen rufen Sie beim Sammeln das vorherige Element aus dem ab, was bereits gesammelt wurde.
Für den Parameter BiConsumer ist a das bisher erfasste Element.
list<recordb> l = lista.stream() .collect( collector.<recorda, list<recordb>, list<recordb>>of( arraylist::new, (a, b) -> { if (a.isempty()) a.add(new recordb(b.id, b.value, 0)); else { recordb x = a.get(a.size() - 1); a.add(new recordb(b.id, b.value, b.value - x.value)); } }, (a, b) -> { a.addall(b); return a; }, x -> x));
Ausgabe
1, 10, 0 2, 15, 5 3, 25, 10 4, 30, 5
Abschließend möchten Sie vielleicht die Klasse recordb loswerden und einfach Map verwenden.
Map<RecordA, Integer> m = new LinkedHashMap<>(); RecordA a, b; m.put(a = listA.get(0), 0); for (int i = 1, n = listA.size(); i < n; i++) m.put(b = listA.get(i), -a.value + (a = b).value);
Das obige ist der detaillierte Inhalt vonListe der Java-Streaming-Arrays und Vergleich mit dem vorherigen Datensatz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Seit seiner Einführung im Jahr 2009 hat sich Bitcoin zu einem führenden Unternehmen in der Welt der Kryptowährungen entwickelt und sein Preis hat enorme Schwankungen erfahren. Um einen umfassenden historischen Überblick zu bieten, stellt dieser Artikel Bitcoin-Preisdaten von 2009 bis 2025 zusammen und deckt wichtige Marktereignisse, Änderungen der Marktstimmung und wichtige Faktoren ab, die die Preisbewegungen beeinflussen.

Bitcoin hat als Kryptowährung seit seiner Einführung erhebliche Marktvolatilität erlebt. Dieser Artikel bietet einen Überblick über den historischen Preis von Bitcoin seit seiner Geburt, um den Lesern zu helfen, seine Preistrends und Schlüsselmomente zu verstehen. Durch die Analyse der historischen Preisdaten von Bitcoin können wir die Einschätzung des Marktes über seinen Wert und die Faktoren, die seine Schwankungen beeinflussen, verstehen und eine Grundlage für zukünftige Investitionsentscheidungen schaffen.

Seit seiner Gründung im Jahr 2009 hat der Preis von Bitcoin im November 2021 auf 69.044,77 USD auf 69.044,77 USD gestiegen und im Dezember 2018 auf 3.191,22 USD gesunken. Ab Dezember 2024 hat der jüngste Preis 100.204 USD überschritten.

Echtzeit-Bitcoin-USD-Preis Faktoren, die den Bitcoin -Preis beeinflussen Indikatoren für die Vorhersage zukünftiger Bitcoin -Preise Hier finden Sie einige wichtige Informationen zum Preis von Bitcoin in den Jahren 2018-2024:

Die Methode zur Anpassung der Größe der Größe der Größe der Größe in CSS ist mit Hintergrundfarben einheitlich. In der täglichen Entwicklung begegnen wir häufig Situationen, in denen wir die Details der Benutzeroberfläche wie Anpassung anpassen müssen ...

Wie kann man den 45-Grad-Kurveneffekt des Segmenters erreichen? Bei der Implementierung des Segmenters verwandeln Sie den rechten Rand in eine 45-Grad-Kurve, wenn Sie auf die linke Schaltfläche klicken, und der Punkt ...

Das Problem der Containeröffnung aufgrund einer übermäßigen Auslassung von Text unter Flex -Layout und Lösungen werden verwendet ...

Ja, die H5-Seitenproduktion ist eine wichtige Implementierungsmethode für die Front-End-Entwicklung, die Kerntechnologien wie HTML, CSS und JavaScript umfasst. Entwickler bauen dynamische und leistungsstarke H5 -Seiten auf, indem sie diese Technologien geschickt kombinieren, z. B. die Verwendung der & lt; canvas & gt; Tag, um Grafiken zu zeichnen oder JavaScript zu verwenden, um das Interaktionsverhalten zu steuern.