Book description
Mit der Version 8 erhielt die objektorientierte Programmiersprache Java die Möglichkeit, mit ihr funktional zu programmieren. Dieser Programmierstil hat seitdem bei Java-Entwicklern immer mehr an Popularität gewonnen, getrieben durch den Trend zu datenzentrierten Anwendungen und neueren Programmiersprachen, die funktionale Programmierung (z.B. Scala, Kotlin) einfach möglich machen. Das Buch richtet sich sowohl an Einsteiger in Java, die einen tieferen Einblick in die funktionale Seite der Sprache erhalten möchten, als auch an erfahrene Java-Entwickler, die ihre tägliche Arbeit um funktionale Aspekte erweitern möchten.
Table of contents
- Cover
- Über den Autor
- Titel
- Impressum
- Inhaltsverzeichnis
- Vorwort
- 1 Einleitung
-
2 Sprachliche Grundlagen
- 2.1 Java Generics
- 2.1.1 Typparameter
- 2.1.2 Typconstraints
- 2.1.3 Ko- und Kontravarianz
- 2.1.4 Typinferenz bei Generics
- 2.1.5 Schwachstellen der Generics in Java
- 2.2 Default-Methoden
- 2.3 Lambda-Ausdrücke
- 2.3.1 Formen von Lambda-Ausdrücken
- 2.3.2 Typ eines Lambda-Ausdrucks
- 2.3.3 Ausnahmen bei Lambda-Ausdrücken
- 2.3.4 Closures
- 2.4 Funktionale Interfaces
- 2.5 Methodenreferenzen
- 2.6 Zusammenfassung
- 3 Programmieren ohne Seiteneffekte
-
4 Programmieren mit Funktionsparametern
- 4.1 Listenverarbeitung mit Funktionen höherer Ordnung
- 4.2 Flexible Programmschnittstellen
- 4.3 Algorithmen
- 4.3.1 Tiefensuche
- 4.3.2 Verallgemeinerung der Suche
- 4.4 Entwurfsmuster
- 4.4.1 Strategie
- 4.4.2 Kommando
- 4.4.3 Besucher
- 4.5 Eingebettete und bedingte Ausführung
- 4.5.1 Eingebetteter Code
- 4.5.2 Bedingte Ausführung
- 4.5.3 Fallunterscheidungen
- 4.5.4 Typtests
- 4.6 Auswertung nach Bedarf
- 4.6.1 Faule Iteratoren
- 4.6.2 Unendliche Folgen
- 4.6.3 Faule Iteration über die Knoten eines Graphen
- 4.7 Zusammenfassung
-
5 Kombination von Funktionen
- 5.1 Flüssige Schnittstellen
- 5.2 Funktionskomposition
- 5.2.1 Aufrufketten beim funktionalen Interface Function
- 5.2.2 Logische Verknüpfungen bei Predicate
- 5.2.3 Bilden von Vergleichsketten mit Comparator
- 5.2.4 Beispiel-Workflows
- 5.3 Kombinator-Parser
- 5.3.1 Parser und Parser-Ergebnisse
- 5.3.2 Kombinationsoperatoren
- 5.3.3 Parser für Boolesche Ausdrücke
- 5.4 Domänen-spezifische Sprachen
- 5.4.1 Fallbeispiel Zustandsmaschinen
- 5.5 Zusammenfassung
-
6 Funktoren, Monoide und Monaden
- 6.1 Funktoren
- 6.1.1 Funktor Optional
- 6.1.2 Gesetze und Eigenschaften
- 6.2 Monoide und Reduktion
- 6.2.1 Monoide
- 6.2.2 Reduktion
- 6.2.3 Monoide in Java
- 6.2.4 Reduzierbare Strukturen
- 6.2.5 Anwendungsbeispiele zur Reduktion mit Monoiden
- 6.3 Monaden
- 6.3.1 Monade Optional
- 6.3.2 Monade Parser
- 6.3.3 Gesetze
- 6.3.4 Bedeutung von Monaden
- 6.3.5 MonadPlus: Monade mit monoider Kombination
- 6.4 Zusammenfassung
-
7 Streams
- 7.1 Grundlagen von Streams
- 7.1.1 Ein erstes Beispiel
- 7.1.2 Externe vs. interne Iteration
- 7.1.3 Bedarfsauswertung
- 7.2 Klassen von Streams
- 7.3 Stream-Operationen
- 7.3.1 Erzeuger-Operationen
- 7.3.2 Zwischenoperationen
- 7.3.3 Terminal-Operationen
- 7.4 Collectors
- 7.4.1 Interface Collector
- 7.4.2 Vordefinierte Collectors
- 7.4.3 Downstream Collectors
- 7.4.4 Eine eigene Collector-Implementierung
- 7.5 Anwendungsbeispiele
- 7.5.1 Ergebnisauswertung mit Streams
- 7.5.2 Wortindex zu einem Text
- 7.6 Hinweise
- 7.6.1 Einmal-Iteration
- 7.6.2 Begrenzung von unendlichen Streams
- 7.6.3 Zustandslose und zustandsbehaftete Operationen
- 7.6.4 Reihenfolge von Operationen
- 7.6.5 Kombinationen von Operationen
- 7.7 Interne Implementierung
- 7.7.1 Beispiel
- 7.8 Zusammenfassung
-
8 Parallele Streams
- 8.1 Erzeugen von parallelen Streams
- 8.2 Parallele Ausführung
- 8.2.1 Spliterators
- 8.2.2 Ausführung durch Fork/Join-Pool
- 8.2.3 Konfiguration des Fork/Join-Thread-Pools
- 8.3 Bedingungen bei paralleler Ausführung
- 8.3.1 Parallele Ausführung und Seiteneffekte
- 8.3.2 Parallele Ausführung und zustandsbehaftete Berechnungen
- 8.3.3 Eigenschaften der Parameter von reduce
- 8.3.4 Paralleles Sammeln
- 8.4 Laufzeit
- 8.5 Zusammenfassung
- 9 Asynchrone Funktionsketten
-
10 Reaktive Streams
- 10.1 Grundlagen
- 10.1.1 Kontrakt von Observable
- 10.1.2 Erzeugen von Observables
- 10.1.3 Anmelden und Abmelden von Observer
- 10.2 Varianten
- 10.2.1 Single
- 10.2.2 Completable
- 10.2.3 Maybe
- 10.3 Hot und Cold Observables
- 10.3.1 ConnectableObservable
- 10.3.2 Beispiel Echtzeitdaten
- 10.4 Operationen
- 10.4.1 Abbildungen
- 10.4.2 Filtern und Teilmengen
- 10.4.3 Reduktion
- 10.4.4 Sammeln
- 10.4.5 Operationen mit Zeit
- 10.4.6 Kombinationen
- 10.4.7 Konvertierungen
- 10.4.8 Seiteneffekte
- 10.5 Nebenläufigkeit
- 10.5.1 Serialisierung von nebenläufigen Ereignissen
- 10.5.2 subscribeOn und Scheduler
- 10.5.3 observeOn
- 10.6 Fehlerbehandlung
- 10.6.1 Fehlerereignisse auslösen
- 10.6.2 Auf Fehler reagieren
- 10.7 Rückstau und Flusskontrolle
- 10.7.1 Reduktion der Menge der Ereignisse
- 10.7.2 Flowables
- 10.8 Testen reaktiver Streams
- 10.9 Zusammenfassung
- 11 Testen mit und von Funktionen
- 12 Weiterführende Konzepte
- A Bibliografie
- B Laufzeitexperimente Parallele Streams
- Index
- Fußnoten
Product information
- Title: Funktionale Programmierung in Java
- Author(s):
- Release date: July 2020
- Publisher(s): dpunkt
- ISBN: 9783864907579
You might also like
book
Einfach Java
Die Leser werden auf Ihrer Entdeckungsreise vom Java-Experten Michael Inden begleitet. Er erklärt ihnen die Grundlagen …
book
Java Challenge
Dieses Buch bietet ein breit gefächertes Spektrumvon über 100 Übungsaufgaben und Programmierpuzzlesinklusive Lösungen zum Knobeln und …
book
Java Übungsbuch - für die Versionen Java 8 bis Java 17
Trainieren Sie Ihre Java-Kenntnisse Learning by Doing anhand praktischer Übungen Mit vollständigen und kommentierten Lösungen Dieses …
book
Java – Der umfassende Programmierkurs
Verständlich, anschaulich, detailliert und nützlich - mit diesem Anspruch tritt das erfolgreiche Autorenteam Louis/Müller an, Einsteigern …