Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Cover
Über den Autor
Titel
Impressum
Inhaltsverzeichnis
Vorwort
1 Einleitung
1.1 Elementare Konzepte und Begriffe
1.2 Funktionale Programmierung in Java
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
3.1 Reine Funktionen
3.1.1 Iteration vs. Rekursion
3.1.2 Referentielle Transparenz und Ersetzungsprinzip
3.1.3 Funktionen mit Gedächtnis
3.2 Funktionale Ausnahmebehandlung mit Optional
3.3 Funktionale Listen
3.3.1 Beispielanwendung
3.4 Paare und Tupel
3.5 Zusammenfassung
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
9.1 Eine Lösung mit parallelen Streams
9.2 Asynchrone Lösung mit Futures
9.3 CompletableFuture
9.4 Asynchrone Programmschnittstellen
9.5 CompletableFuture als Promise
9.6 Kombination von CompletableFutures
9.6.1 Beispiel
9.7 Zusammenfassung
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
11.1 Funktionsparameter bei JUnit 5
11.2 AssertJ: Eine DSL für Unit-Tests
11.3 Eigenschaftsbasiertes Testen nach QuickCheck
11.3.1 Generatoren von Zufallswerten
11.3.2 Tests
11.3.3 Shrinken der Werte
11.4 Zusammenfassung
12 Weiterführende Konzepte
A Bibliografie
B Laufzeitexperimente Parallele Streams
Index
Fußnoten
← Prev
Back
Next →
← Prev
Back
Next →