Blog

Java 8 Stream API

Java Stream Debugger für IDEA

Die Java 8 Streams haben den Umgang mit Collections grundlegend verändert. Statt den Inhalt von Collections mit for- oder while-Schleifen zu bearbeiten, erlauben die Streams eine Aneinanderkettung von Operationen, die über die Elemente der Collection ausgeführt werden. Das Debuggen solcher Implementierungen ist mit dem Java Stream Debugger Plugin für IDEA eine sehr einfache Geschichte. Dieser Artikel zeigt ein kurzes Beispiel.

Nehmen wir ein einfaches Code-Beispiel:

List<Integer> numbers = Arrays
        .asList(1, 2, 3, 4, 5, 6, 7, 8,
                9, 10, 11, 12, 13, 14, 15, 16);

    int sumOfAllEvenNumbers = numbers
        .stream()
        .mapToInt(Integer::intValue)
        .filter(number -> number % 2 == 0)
        .peek(System.out::println)
        .sum();
    System.out.print("Sum of all even numbers: "
                         + sumOfAllEvenNumbers);
  }

Eine Liste von Ganzzahlen wird zunächst auf den primitiven Datentyp int gecastet, um damit Rechenoperationen durchführen zu können. Wir wollen einen Teil der Zahlen summieren.

Danach filtern wir alle ungeraden Zahlen heraus, da wir nur die Summe aller geraden Zahlen bilden wollen.

Zwischendurch geben wir alle Zahlen, die nach der Filterung noch übrig sind, mit System.out.println auf der Konsole aus.

Am Ende bilden wir die Summe. Diese geben wir außerhalb des Streams ebenfalls auf der Konsole aus.

Streams debuggen

Wie funktioniert das Debuggen der Stream-API? Herkömmliche Java-Debugger sind meist keine große Hilfe.

Die Implementierung einer Stream-Verarbeitung ist von der Java-Syntax her eigentlich nur eine sehr lange Zeile Java-Code. Das Java Stream Debugger Plugin für IDEA nimmt sich dieses Problems an. Wie das genau aussieht?

Zunächst installieren wir das Plugin. Dann setzen wir einen Breakpoint in einer der Stream-Codezeilen und drücken dann das Filter-Symbol:

Breakpoint für Stream-Debugger setzen

Breakpoint für Stream-Debugger setzen

Der Klick auf das Filter-Symbol zeigt uns für jeden Bearbeitungsschritt im Stream den zu dieser Zeit bestehen Inhalt des Streams. Ganz rechts sehen wir das Endergebnis der Verarbeitung.

Stream-Debugger

Stream-Debugger

Weiterhin ist es möglich, einzelnen Werten auf Ihrem Verarbeitungsweg durch den Stream zu folgen. Ein Klick auf den Ausgangswert zeigt seinen Weg im Debugger auf.

Einzelwert im Debugger verfolgen.

Einzelwert im Debugger verfolgen.

Kurzes Fazit

Mit diesem Plugin lässt sich zumindest ein Argument gegen die Verwendung von Stream, das mir oft zu Ohren kommt, entkräften. Dass sich Streams nicht ordentlich debuggen lassen, entspricht spätestens mit diesem Plugin nicht mehr der Wahrheit.

Über den Autor

Antwort hinterlassen