© Excellent backgrounds/Shutterstock.com
Pattern-Migration und Best Practices mit Java 8 Streams

Hello Streams World!


Java 8 ist verfügbar, das Streams API in aller Munde. Was aber kann man nun alles damit bewirken? Der folgende Beitrag beleuchtet das Thema Pattern-Migration und zeigt Best Practices aus dem Entwickleralltag auf.

Streams im praktischen Alltag gibt es wohl erst recht kurze Zeit. Umso besser, wenn wir uns die ersten praktischen Erfahrungen genauer ansehen. Fragen stellen sich beispielsweise mit Blick auf die Pattern-Migration oder bezüglich Best Practices bei der Anwendung bekannter Werkzeuge wie eines Debuggers.

Hello Streams World!

Java 8 ist nun endlich verfügbar, die ersten Patches sind sogar schon vorhanden. Der Alltag kann nun beginnen. Aber damit entstehen auch die ersten offenen Fragen. Beginnen wir mit einem sehr einfachen Beispiel: der for-Schleife. Die findet man quasi überall. Wie kann man sie in einem Streams-Konstrukt umsetzen? Listing 1 zeigt ein Beispiel für eine Prä-JDK-8-for-Schleife und ein Konstrukt basierend auf Streams.

Listing 1

@org.junit.Test public void testFor001() throws Exception { List<String> demoValues = createDemoValues(); for (final String demoValue : demoValues) { System.out.println(demoValue); } demoValues.forEach(System.out::println); //JDK8 }

Was auf den ersten Blick trivial aussieht, enthält aber auch ein paar Dinge, die es zu bedenken gilt. Nehmen wir an, es soll ein Debugger zum Einsatz kommen. In der Prä-JDK-8-Version ist das schnell erledigt. Der Break Point kann also direkt an die Zeile mit dem System.out.println gesetzt werden. Aber wie geht das nun bei den Streams? Wo kann man dort den Break Point setzen? Hier gibt es verschiedene Möglichkeiten. In der folgenden wird z. B. fast die vollständige Syntax verwendet:

demoValues.forEach( v ->{ System.out.println(v); });

Hier ist der Vorteil gegenüber der Prä-JDK-8-Version fast vollständig aufgebraucht, wenn man ausschließlich die Anzahl Zeichen als Kennzahl verwendet. Was aber steckt nochmal genau hinter diesem Konstrukt? In Listing 2 ist zur Erinnerung aufgelistet, welche weiteren Möglichkeiten bestehen.

Listing 2

Consumer<String> action = new Consumer<String>() { @Override public void accept(String s) { System.out.println("s = " + s); } }; // kürzere Versionen Consumer<String> action = v -> { System.out.println(v); }; Consumer<String> action = v -> System.out.println(v); demoValues.forEach(action);

Selbst bei den sehr kurzen Notationen kann man den Break Point direkt an die Zeile selbst setzen. Eine interessante Tatsache ist allerdings zu bedenken. Wenn man die N...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang