Prinzip
Beginnen wir mit einem einfachen Stream, für den wir in IntelliJ einen einfachen Stream-Debugger erstellen können:
.sorted()
.collect(toList());
Der obige Code erstellt einen Stream, der aus den Zeichenfolgen „A“, „B“ und „C“ besteht. Dieser Stream wird dann sortiert(), wodurch ein neuer Stream erstellt wird (zumindest in Java 8-10), dessen Elemente der alphabetischen Reihenfolge der Elemente des ersten Streams entsprechen. Mit anderen Worten: Der zweite Stream enthält drei Elemente: „A“, „B“ und „C“. Schließlich fügen diese die Elemente in eine Liste ein.
Stream
Stream
List
Dies zeigt im Allgemeinen, wie der Stream-Debugger funktioniert. Es teilt eine Stream-Pipeline-Operation in mehrere Codefragmente auf und ruft Schritt für Schritt Zwischenoperationen auf, sodass der Elementinhalt jeder Operation für die Analyse beibehalten werden kann.
Stream.of("C", "B", "A")
.peek(saveStep(0))
.sorted()
.peek(saveStep(1))
.collect(toList()); // Das Endergebnis wird in Schritt 2 gespeichert
HINWEIS: Die tatsächliche technische Umsetzung ist nicht so, sie bietet lediglich einen guten Überblick.
Es gibt eine visuellere Darstellung im Debugger von IntelliJ:
Es zeigt prägnant und klar die Details jedes Zwischenvorgangs in der Stream-Pipeline sowie das Endergebnis an.
Rufen Sie
an Wenn Sie den Stream-Debugger aufrufen möchten, müssen Sie zunächst einen Haltepunkt an der Stream-Definition setzen:
Starten Sie dann eine Debugging-Sitzung (im Debug-Modus ausführen):
Wenn ein Haltepunkt erreicht ist, können Sie die angegebene Schaltfläche drücken (die möglicherweise schwer zu finden ist), um den Stream-Debugger aufzurufen, der unten mit einem roten Kreis markiert ist:
Dadurch wird der Stream-Debugger geöffnet, wie oben gezeigt.
Datenbank-Streams
Ich verwende Speedment (Stream-ORM), das das Abfragen der Datenbank über Standard-Java-Streams-Vorgänge und damit das Debuggen von Vorgängen über IntelliJ ermöglicht. Ein Speedment-Projekt kann über den Speedment-Initialisierer erstellt werden.
Eine Java-Anwendung kann auf folgende Arten erstellt werden.
Speedment-App = neuer SakilaApplicationBuilder()
.withPassword("sakila-password") // Durch Ihr eigenes Passwort ersetzen
.build();
FilmManager movies = app.getOrThrow(FilmManager.class);
Jetzt können wir die Datenbanktabelle „Film“ streamen. Hier ist ein Beispiel:
List
.filter(Film.LENGTH.equal(60))
.sorted(Film.RATING.reversed())
.collect(toList());
Der Code filtert alle Filmobjekte mit einer Länge von 60 Minuten heraus, sortiert dann die Filmobjekte (in absteigender Reihenfolge) nach Film.RATING und fügt schließlich alle Elemente in eine Liste ein.
Wenn wir den Stream-Debugger aufrufen, sehen wir das folgende Bild:
Wir können sehen, dass der erste Stream 1000 Filme enthält. Nach dem Filtervorgang bleiben nur noch 8 Filme übrig, die dann sortiert und in einer Liste abgelegt werden.
Statistiken berechnen
Angenommen, wir möchten die minimale, maximale und durchschnittliche Dauer aller mit PG-13 bewerteten Filme (eine Art Filmbewertungssystem) berechnen. Der Code lautet wie folgt:
IntSummaryStatistics stat = movies.stream()
.filter(Film.RATING.equal("PG-13"))
.mapToInt(Film.LENGTH.asInt())
.summaryStatistics();
Wie Sie sehen, können wir mit dem Stream-Debugger interagieren und auf Elemente in der Stream-Pipeline klicken, um sie hervorzuheben, und wir können auch zwischen Elementen scrollen, um einzelne Schritte anzuzeigen.
Speedment optimiert Datenbank-Stream-Zwischenoperationen und integriert sie in SQL-Abfragen. Bei Verwendung des Stream-Debuggers wird die Optimierung jedoch nicht wirksam, sodass wir alle Schritte in der Stream-Pipeline sehen können.
Das obige ist der detaillierte Inhalt vonSo debuggen Sie Java Streams mit IntelliJ. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!