Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Java Grundkurs 3: Generische Programmierung, Datenströme, Datumsrechnung

Function und BiFunction

Testen Sie unsere 2017 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
In diesem Video lernen Sie die vordefinierten Functional Interfaces namens Function und BiFunction kennen.

Transkript

Java hat eine Reihe von nützlichen Functional Interfaces vordefiniert, von denen ich Ihnen in diesem Video die Functional Interfaces mit dem Namen "Function" und "Bifunction" vorstellen werde. Vielleicht sollte ich auch die Klasse "App" noch etwas vereinfachen, denn ohne den Umweg über die Methode hier unten ist der Quelltext gleich viel besser lesbar. Ich entferne die Methode also wieder und werde hier oben das Functional Interface Rechner nutzen und hierüber dann eine Variable deklarieren. Die Variable nenne ich "quadratRechner". Und dieser Variablen übergebe ich dann eine Lambda-Expression "a * a" und diese Lambda-Expression, die werde ich dann hier unten aufrufen, "quadratRechner.rechne", mit dem Übergabe-Parameter "groesse". So, und nun wechsle ich zum Interface Rechner. Denn dieses Interface werde ich gleich durch das vordefinierte Interface Function ersetzen. Das vordefinierte Functional Interface mit dem Namen Function ähnelt dem von uns selbst programmierten Functional Interface Rechner. Deshalb schauen wir uns zunächst nochmal unsere Eigenimplementierung an. Als wir dieses Functional Interface programmiert haben, versuchten wir es möglichst generisch. Das heißt möglichst universell verwendbar zu machen. Das ist uns auch ganz gut gelungen. Denn der Generics Consumer kann beispielsweise die Datentypen von Übergabeparameter und Rückgabewert frei festlegen. Und überhaupt ist unser Interface recht neutral. Denn das Interface kann von allen Implementierungen eingesetzt werden, die die Aussage treffen, "Gib mir ein beliebiges Objekt und ich liefere dir einen passenden Rückgabewert". Ein solch allgemein gehaltenes Functional Interface ist also bald universell einsetzbar. Deshalb wäre es eigentlich vorteilhaft, wenn die Java Standardbibliothek solch ein Functional Interface mitliefert. Und genau das Geiche haben sich auch die Entwickler der Programmiersprache Java gedacht. Deswegen wurde ein ähnliches Functional Interface auch in der Java Standardbibliothek zur Verfügung gestellt. Dieses Functional Interface nennt sich Function und befindet sich im Programmpaket "java.util.function". Wir hätten also kein eigenes Functional Interface mit dieser Funktionalität zu programmieren brauchen. Und im Grunde genommen ist das auch nicht empfehlenswert, wenn die Java Standardbibliothek ein solches bereithält. Deshalb werde ich in unserem Beispielprogramm das eigene Functional Interface Rechner gleich löschen und stattdessen das Functional Interface Function der Java Standardbibliothek verwenden. Aber zunächst schauen wir uns das Gesamtpaket aller vordefinierten Functional Interfaces von JavaSE an. Und zwar wechsle ich in das Programmpaket "java.util.function". Denn dort sind die vordefinierten Functional Interfaces untergebracht. Ich gehe also auf die Suche nach dem Typ oder nach dem Interface Function, indem ich die Strg + Shift + T Tastenkombination wähle, und dort schreibe ich "Function" oben in das Eingabefeld rein und dann sehen Sie schon, dass mir hier unten alles angezeigt wird, was unter dem Bezeichner gefunden werden kann. Und ich klick jetzt doppelt hier oben auf "java.util.function" auf, und dann offnet sich die Klasse "java.util.function", die schauen wir uns jetzt etwas genauer an. Denn ich möchte herausfinden, wie sich die Single Abstract Method dieses Interfaces nennt. Ich scrolle hinunter und da bin ich auch schon. Der Name der Single Abstract Method lautet also Apply. Die Methode "apply" des Interfaces Function nimmt ein Objekt entgegen und liefert ein Objekt als Rückgabewert zurück. Nun wechsle ich wieder in unser BMIBeispiel-Programm, denn dort werde ich unsere Eigenimplementierung entfernen. Ich lösche also einfach das Interface Rechner. Jetzt bin ich hier in der App drin und das Interface Rechner, also unsere Eigenimplementierung existiert nicht mehr. Ich kann es aber einfach ersetzen durch "Function", denn die funktioniert genauso. Ich importiere das Interface und auch dort brauche ich es. So, und hier heißt die SAM, also die Single Abstract Method, nicht "rechner", sondern "apply". Das haben wir ja vorhin gesehen. Und dann bin ich mit der Programmierung auch schon fertig. Und das probiere ich einmal aus. Und wie Sie sehen erscheint hier wieder das richtige Ergebnis. Und als Nächstes werde ich Ihnen jetzt ein weiteres vordefiniertes Functional Interface der Java Standardbibliothek zeigen. Hierfür wandle ich unser Beispielprogramm etwas ab. Und zwar soll der zweite Lambda-Ausdruck, hier dieser, der soll für die Berechnung des BMI-Werts nun zwei Parameter entgegennehmen. Die Deklaration der lokalen Variable "groesse" entferne ich. Die brauche ich nicht mehr. Stattdessen setze ich einen zweiten Parameter ein. Zunächst brauch ich eine runde Klammer. Dann schreibe ich den zweiten Parameter hier vor das Gewicht, also "groesse, gewicht". Und hier unten bei der Methode "apply" sollen zwei Parameter übergeben werden. Nämlich sowohl die Größe, als auch das Gewicht der Katze "Pinki". Also schreibe ich die Größe hinzu, "0,51, 6,1". Das vordefinierte Functional Interface mit dem Namen Function eignet sich für unser Vorhaben jetzt nicht mehr, da es lediglich einen einzigen Parameter entgegennimmt und hiermit ein Ergebnis zurückliefert. Beim BMIRechner müssen wir der Single Abstract Method aber nun zwei Parameter übergeben, um ein Ergebnis zu erhalten. Und genau für diesen Zweck bietet uns die Java Standardbibliothek das Functional Interface Bifunction an. Und auch das schauen wir uns mal an über Strg + Shift + T "BiFunction", Doppelklick auf das was gefunden wurde und nun sehen Sie, dass wir hier im Interface BiFunction sind. Wie Sie sehen nimmt das vordefinierte Functional Interface BiFunction zwei Parameter entgegen und beantwortet die Anfrage mit einem Ergebnis. BiFunction eignet sich also für unser Beispiel ganz gut. Was wir hier noch beachten müssen ist, dass wir bei dem Functional Interface BiFunction drei Typ Parameter parametrisieren müssen. Die erste Parametrisierung brauchen wir für den ersten Parameter. Dort muss also der Datentyp Double hin. Dann haben wir hier noch einen zweiten Parameter für unseren zweiten Parameter brauchen wir auch wieder einen Double, weil diese beiden ja in die Formel reinkommen. Der Dritte Typ Parameter wird für das Ergebnis gebraucht. Auch dort haben wir es wieder mit dem Datentyp Double zu tun. Also gehe ich jetzt wieder zurück zu unserer Klasse. BiFunction schließe ich, und jetzt fehlt hier die dritte Parametrisierung und Function ist ja jetzt falsch. Es muss ja jetzt die BiFunction sein und die importieren wir auch. Schon sind wir fertig. Ich speichere das Programm mal ab und probiere es auch noch einmal aus. Und jetzt sehen Sie das Ergebnis auch hier wieder. In diesem Video haben Sie gelernt, dass Java ganz allgemein gehaltene Functional Interfaces vordefiniert, die Sie in Ihrem Java-Programm als Grundlage für eine Lambda-Expression einsetzen können. Dabei habe ich Ihnen das vordefinierte Functional Interface mit dem Namen Function und das vordefinierte Functional Interface mit dem Namen BiFunction vorgestellt. In unserem BMI-Beispielprogramm haben wir die vordefinierten Functional Interfaces einsetzen können, sodass wir auf die eigenen Implementierungen verzichten konnten.

Java Grundkurs 3: Generische Programmierung, Datenströme, Datumsrechnung

Steigen Sie tiefer in die Java-Programierung ein und lernen Sie den Umgang mit generischen Typen, Lamda-Ausdrücken, DAtenströmen und mit Datums- und Zeitberechnung.

5 Std. 24 min (47 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:09.10.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!