Java 9 Streams
Von Sven Ruppert
()
Über dieses E-Book
In seinem shortcut zeigt Sven Ruppert, was genau diese Streams sind, wie man sie einsetzt und welche Vorteile sich aus dem Einsatz ergeben, sowohl für serielle als auch für parallele Nutzung. Dabei erläuert er anhand zahlreicher Codebeispiele sehr genau verschiedene Methoden der Implementierung, geht bei den "Collector"- und "StreamSupport"-Klassen ins Detail und schlägt den großen Bogen zum Paradigma der funktionalen Programmierung.
Mehr von Sven Ruppert lesen
schnell + kompakt
Ähnlich wie Java 9 Streams
Titel in dieser Serie (100)
TFS 2012 Versionskontrolle: Grundlagen, Check-In Policies und Branch-Modelle Bewertung: 0 von 5 Sternen0 BewertungenErfolgreiche Spieleentwicklung: OpenCL Bewertung: 0 von 5 Sternen0 BewertungenAlgorithmen: Grundlagen und Implementierung Bewertung: 0 von 5 Sternen0 BewertungenEinstieg in Google Go Bewertung: 0 von 5 Sternen0 BewertungenSkalierbare Softwaresysteme: Design, Betrieb und Optimierungspotenziale Bewertung: 0 von 5 Sternen0 BewertungenIT Wissensmanagement: Theorie und Praxis Bewertung: 0 von 5 Sternen0 BewertungenZend Framework 2: Für Einsteiger und Umsteiger Bewertung: 0 von 5 Sternen0 BewertungenApache Tapestry: Einstieg in die komponentenorientierte Webentwicklung Bewertung: 0 von 5 Sternen0 BewertungenJavaScript für Eclipse-Entwickler: Orion, RAP und GWT Bewertung: 0 von 5 Sternen0 BewertungenJava EE Security Bewertung: 0 von 5 Sternen0 BewertungenAmazon Web Services für .NET Entwickler Bewertung: 0 von 5 Sternen0 BewertungenErfolgreiche Spieleentwicklung: OpenGL, OpenAL und KI Bewertung: 0 von 5 Sternen0 BewertungenJavaScript auf dem Server Bewertung: 0 von 5 Sternen0 BewertungenHTML5 Security Bewertung: 0 von 5 Sternen0 BewertungenJava 7: Fork-Join-Framework und Phaser Bewertung: 0 von 5 Sternen0 BewertungenTFS 2012 Anforderungsmanagement: Work Items und Prozessvorlagen Bewertung: 0 von 5 Sternen0 BewertungenADF - Mobile Apps entwickeln und Swing ablösen: Mobile Apps entwickeln und Swing ablösen Bewertung: 0 von 5 Sternen0 BewertungenGeolocation mit PHP: Foursquare-API, Google Places & Qype Bewertung: 0 von 5 Sternen0 BewertungenNFC: Near Field Communication für Android-Entwickler Bewertung: 5 von 5 Sternen5/5UX Design für Tablet-Websites: Ein Überblick Bewertung: 0 von 5 Sternen0 BewertungenHTML5 für Mobile Web Bewertung: 0 von 5 Sternen0 BewertungenC++: Kurzportträt einer zeitlosen Sprache Bewertung: 0 von 5 Sternen0 BewertungenÜberzeugende Präsentationen: Konzeption, Technik und Design Bewertung: 0 von 5 Sternen0 BewertungenMobile Business: Was Entscheider morgen wissen müssen Bewertung: 0 von 5 Sternen0 BewertungenEclipse meets Java FX Bewertung: 0 von 5 Sternen0 BewertungenQualität in IT-Architekturen: Strategie und Planung Bewertung: 0 von 5 Sternen0 BewertungenServiceorientierte Architektur: Anforderungen, Konzeption und Praxiserfahrungen Bewertung: 0 von 5 Sternen0 BewertungenQualitätssicherung mit JavaScript und PHP Bewertung: 0 von 5 Sternen0 BewertungenF#: Ein praktischer Einstieg Bewertung: 0 von 5 Sternen0 BewertungenBig Data: Executive Briefing Bewertung: 0 von 5 Sternen0 Bewertungen
Ähnliche E-Books
C# 8.0 – kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenJava 8 Streams Bewertung: 0 von 5 Sternen0 BewertungenClojure: Funktionale Programmierung für die JVM Bewertung: 0 von 5 Sternen0 BewertungenArchitekturpatterns mit Python: Test-Driven Development, Domain-Driven Design und Event-Driven Microservices praktisch umgesetzt Bewertung: 0 von 5 Sternen0 BewertungenC# 10 – kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenC# 6.0 – kurz & gut Bewertung: 5 von 5 Sternen5/5Java 7: Fork-Join-Framework und Phaser Bewertung: 0 von 5 Sternen0 BewertungenNebenläufigkeit in Java und C++ Bewertung: 0 von 5 Sternen0 BewertungenAufsetzen, Testen und Betrieb einer Android-App Bewertung: 0 von 5 Sternen0 BewertungenJavaScript auf dem Server Bewertung: 0 von 5 Sternen0 BewertungenJavaScript für Java-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenWeb Services mit Apache CXF: Schnell und einfach erklärt Bewertung: 0 von 5 Sternen0 BewertungenSprachenkompendium: Vala, Go und Rust Bewertung: 0 von 5 Sternen0 BewertungenEinführung in die Programmierung mit Java: Begleitunterlagen zu dem Onlinekurs Bewertung: 0 von 5 Sternen0 BewertungenPowerShell: Anwendung und effektive Nutzung Bewertung: 5 von 5 Sternen5/5Spring Boot und Spring Cloud Bewertung: 5 von 5 Sternen5/5Dynamic Proxies: Effizient programmieren Bewertung: 0 von 5 Sternen0 BewertungenDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Bewertung: 4 von 5 Sternen4/5Enterprise Java Web Services Bewertung: 0 von 5 Sternen0 BewertungenMemory Leaks in Java Bewertung: 0 von 5 Sternen0 BewertungenApache Tamaya: Einstieg in die Konfiguration in Java Bewertung: 0 von 5 Sternen0 BewertungenDSL mit Xtext/Xtend. 4GL mit externem Quellcode Bewertung: 0 von 5 Sternen0 BewertungenDSL mit Xtext/Xtend. Luecken(x)text Bewertung: 0 von 5 Sternen0 BewertungenEinblicke in C# 6.0 Bewertung: 0 von 5 Sternen0 BewertungenOSGi-Entwicklung Bewertung: 0 von 5 Sternen0 BewertungenSAP Schnittstellen Programmierung mit RFC und VBA: SAP Daten mit MS Access bearbeiten Bewertung: 0 von 5 Sternen0 BewertungenLogging: Applikationsbeispiele Bewertung: 0 von 5 Sternen0 BewertungenAlgorithmen: Grundlagen und Implementierung Bewertung: 0 von 5 Sternen0 BewertungenProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Bewertung: 0 von 5 Sternen0 BewertungenApache Tapestry: Einstieg in die komponentenorientierte Webentwicklung Bewertung: 0 von 5 Sternen0 Bewertungen
Programmieren für Sie
.NET-Praxis: Tipps und Tricks zu .NET und Visual Studio Bewertung: 0 von 5 Sternen0 BewertungenLinux Grundlagen - Ein Einstieg in das Linux-Betriebssystem Bewertung: 0 von 5 Sternen0 BewertungenAlgorithmen: Grundlagen und Implementierung Bewertung: 0 von 5 Sternen0 BewertungenJavaScript kurz & gut Bewertung: 3 von 5 Sternen3/5Programmieren lernen mit Python 3: Schnelleinstieg für Beginner Bewertung: 0 von 5 Sternen0 BewertungenWeniger schlecht programmieren Bewertung: 4 von 5 Sternen4/5Linux Befehlsreferenz: Schnelleinstieg in die Arbeit mit der Konsole, regulären Ausdrücken und Shellscripting Bewertung: 0 von 5 Sternen0 BewertungenMikrocontroller in der Elektronik: Mikrocontroller programmieren und in der Praxis einsetzen Bewertung: 0 von 5 Sternen0 BewertungenPython kurz & gut: Für Python 3.x und 2.7 Bewertung: 3 von 5 Sternen3/5Git kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenSQL von Kopf bis Fuß Bewertung: 4 von 5 Sternen4/5Programmieren von Kopf bis Fuß Bewertung: 4 von 5 Sternen4/5C von Kopf bis Fuß Bewertung: 3 von 5 Sternen3/5Raspberry Pi: Mach's einfach: Die kompakteste Gebrauchsanweisung mit 222 Anleitungen. Geeignet für Raspberry Pi 3 Modell B / B+ Bewertung: 0 von 5 Sternen0 BewertungenHacken mit Python und Kali-Linux: Entwicklung eigener Hackingtools mit Python unter Kali-Linux Bewertung: 0 von 5 Sternen0 BewertungenDie ultimative FRITZ!Box Bibel - Das Praxisbuch 2. aktualisierte Auflage - mit vielen Insider Tipps und Tricks - komplett in Farbe Bewertung: 0 von 5 Sternen0 BewertungenDas Excel SOS-Handbuch: Wie sie Excel (2010-2019 & 365) schnell & einfach meistern. Die All-in-One Anleitung für ihren privaten & beruflichen Excel-Erfolg! Bewertung: 0 von 5 Sternen0 BewertungenDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Bewertung: 4 von 5 Sternen4/5Eigene Spiele programmieren – Python lernen: Der spielerische Weg zur Programmiersprache Bewertung: 0 von 5 Sternen0 BewertungenAndroid-Programmierung kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenNew Game Plus: Perspektiven der Game Studies. Genres - Künste - Diskurse (Bild und Bit. Studien zur digitalen Medienkultur) Bewertung: 0 von 5 Sternen0 BewertungenSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Bewertung: 0 von 5 Sternen0 BewertungenPython | Schritt für Schritt Programmieren lernen: Der ultimative Anfänger Guide für einen einfachen & schnellen Einstieg Bewertung: 0 von 5 Sternen0 BewertungenRaspberry Pi: Einstieg • Optimierung • Projekte Bewertung: 5 von 5 Sternen5/5Perspektiven für Informatiker 2019: Branchenüberblick, Erfahrungsberichte und Tipps zum Berufseinstieg Bewertung: 0 von 5 Sternen0 BewertungenHTML5-Programmierung von Kopf bis Fuß: Webanwendungen mit HTML5 und JavaScript Bewertung: 0 von 5 Sternen0 BewertungenMicrocontroller für das IoT Bewertung: 0 von 5 Sternen0 BewertungenProgrammieren für Einsteiger: Teil 1 Bewertung: 0 von 5 Sternen0 BewertungenPython lernen – kurz & gut Bewertung: 0 von 5 Sternen0 BewertungenDas Franzis Starterpaket Arduino Uno: Das Handbuch für den Schnelleinstieg Bewertung: 0 von 5 Sternen0 Bewertungen
Rezensionen für Java 9 Streams
0 Bewertungen0 Rezensionen
Buchvorschau
Java 9 Streams - Sven Ruppert
GmbH
1 Funktionale Programmierung in Java 9
Seit Java 8 ist das Stream-API im JDK verfügbar und es erfreut sich großer Beliebtheit. Im Zusammenhang mit den ebenfalls in Java 8 dazugekommenen Lambdas ergibt sich ein recht großes Spektrum an Funktionalität und Struktur, was bei vielen Entwicklern dazu geführt hat, sich sowohl mit den Aspekten der funktionalen als auch der reaktiven Programmierung auseinanderzusetzen.
1.1 Was waren nochmal diese Streams?
Jeder ist in Java schon einmal mit irgendeiner Form von Streams konfrontiert worden. Aber was genau macht einen Stream nun im JDK 8/9 aus? Was bringen Streams dem Entwickler und wie werden sie verwendet? Wie kann man mit funktionalen Aspekten beginnen, ohne die Sprache zu wechseln, und wird für reaktive Programmierung wirklich ein großes Framework benötigt? Wir werden uns nun Schritt für Schritt diesen Themen zuwenden und zeigen, dass all die erforderlichen Dinge im Core JDK 9 enthalten sind.
Es gibt einige Dinge, die einen Stream von einer Datenstruktur unterscheiden:
Zusätzlich zu den Quelltextbeispielen im Text verwende ich auch die Sources des Open-Source-Projekts Functional Reactive with Core Java1. Diese befinden sich unter https://github.com/functional-reactive/functional-reactive-lib/.
Streams sind keine Datenstruktur, was bedeutet, dass sie keinen Storage für die Daten selbst darstellen. Es handelt sich eher um eine Pipeline für Datenströme. In dieser Pipeline werden verschiedene Transformationen auf die Daten angewandt. In diesem speziellen Fall werden die Transformationen nicht auf den Daten der Quellstruktur selbst durchgeführt. Die zugrunde liegenden Datenstrukturen wie Arrays oder Listen werden also nicht verändert, aber bei den enthaltenen Elementen ist Vorsicht geboten. Ein Stream wrappt also die Datenstruktur, entnimmt ihr die Quelldaten und arbeitet auf diesen Elementen.
Streams wurden für den Einsatz von Lambdas konzipiert. Es gibt also keine Streams ohne Lambdas, was kein Problem darstellt, da Streams und Lambdas seit Version 8 zusammen im JDK enthalten sind.
Streams bieten keinen wahlfreien Zugriff per Index oder Ähnlichem auf die Quelldaten. Der Zugriff auf das erste Element ist möglich, nicht jedoch auf beliebige nachfolgende Elemente. Das bedeutet, dass auch bei der Verarbeitung aller Daten erst einmal davon ausgegangen werden muss, dass wir immer nur Zugriff auf das gerade verarbeitete Element haben. Jede Stufe der Verarbeitung sollte demnach zustandslos sein.
Streams bieten guten Support, um die Ergebnisse selbst wieder als z. B. Array oder List zur Verfügung zu stellen. Damit wird es einem Entwickler sehr einfach gemacht, zwischen diesen beiden Welten hin und her zu wechseln.
Streams sind „lazy" organisiert. Das bedeutet, dass die Elemente erst dann geholt werden, wenn die Operation auf ihnen angewandt werden soll. Besteht die Datenquelle aus tausend Elementen, dann dauert der erste Zugriff nicht tausend Zeiteinheiten, sondern eine Zeiteinheit (vorausgesetzt, der Zugriff auf ein Element ist im Zeitverbrauch linear).
Streams sind parallel, jedoch nur wenn gewünscht. Streams kann man prinzipiell in zwei Hauptgruppen unterteilen: in serielle und parallele Implementierungen. Wenn also Operationen atomar und ohne Invarianten durchgeführt werden können, wird kein typischer Multi-Threaded-Code notwendig, um die im System schlafenden Cores zu verwenden.
Streams sind ungebunden, da sie nicht wie Collections initial gefüllt werden. Damit können Streams auch unendlich sein. Es können Generatorfunktionen angegeben werden, die für die permanente Lieferung von Quelldaten sorgen, die erzeugt werden, wenn der Client Elemente des Streams konsumiert.
Streams werden konsumiert. Wird ein Stream einmal vollständig konsumiert bzw. terminiert, so kann er kein zweites Mal konsumiert werden. Es muss also ein neuer Stream derselben Struktur erzeugt werden.
1.2 Functional Interfaces
Mit Java 8 bekamen wir die Functional Interfaces, die dann in Java 9 erweitert wurden. Diese sind ein oft verwendetes technisches Mittel, um funktionale Elemente in Java zu realisieren. Zur Wiederholung seien hier nochmals einige Kleinigkeiten hinsichtlich der Interfaces und der Änderungen in Java 9 dargestellt.
Wir haben ein Interface mit zwei Methoden. Eine davon, doMore(), ist statisch, die andere, doSomething(), hat eine default-Implementierung (Listing 1.1).
public interface DemoInterface {
static void doMore() {
System.out.println(DemoInterface.class.getSimpleName() + :
+ doMore
);
}
default void doSomething() {
System.out.println(DemoInterface.class.getSimpleName() + :
+ doSomething
);
}
}
Listing 1.1
Nun erstellen wir ein Interface mit dem Namen InterfaceA und erben von DemoInterface. Hier überschreiben wir die Methode doSomething() (Listing 1.2).
public interface InterfaceA extends DemoInterface {
default void doSomething() {
System.out.println(InterfaceA.class.getSimpleName() + :
+ doSomething
);
}
}
Listing 1.2
Zuletzt erstellen wir ein