UID:
kobvindex_ERBEBC6272119
Format:
1 online resource (342 pages)
ISBN:
9783960889847
Series Statement:
Programmieren mit Java
Note:
Intro -- 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
Additional Edition:
Print version: Prähofer, Herbert Funktionale Programmierung in Java Heidelberg : dpunkt.verlag,c2020 ISBN 9783864907579
Keywords:
Electronic books.
URL:
https://ebookcentral.proquest.com/lib/th-brandenburg/detail.action?docID=6272119