Die Aufgabe
Aufgabe 2
Gegeben ist die Klasse Reise. Für die Art des Verkehrsmittels wird das Enum „Verkehrsmittel“ verwendet.
In der main-Methode der Klasse „FunktionenFuerReisen“ werden bereits einige Reise-Objekte angelegt.
a) Es soll der durch eine Reise entstehende CO2-Ausstoß mit Hilfe eines Lambdas berechnet werden.
Der typische CO2-Ausstoß in kg pro Personen-km ist
- Bei einem Auto (mit 2 Personen): 0,1
- Bei der Bahn: 0,03
- Beim Flugzeug: 0,2
Schreiben Sie einen Lambda-Ausdruck, der das Interface „Function<T, R>“ implementiert. Überlegen Sie, welche Typen für T und R eingesetzt werden müssen. Speichern Sie das Lambda in einer Variablen und wenden Sie es auf jedes Reiseobjekt an. Das Ergebnis soll jeweils auf der Konsole ausgegeben werden.
b) Es sollen zwei Lambdas geschrieben werden, die das Interface „Predicate<T>“ implementieren. Überlegen Sie sich, welcher Typ für T eingesetzt werden muss.
- Das eine Lambda soll überprüfen, ob es sich bei einer Reise um eine Fernreise handelt. Das ist der Fall, wenn die Distanz größer als 1000 km ist.
- Das andere Lambda soll überprüfen, ob es sich um einen Kurzstreckenflug handelt. Das ist der Fall, wenn die Distanz kleiner als 1000 km und das Verkehrsmittel „Flugzeug“ ist.
Wenden Sie die beiden Lambdas auf die Reisen an und überprüfen Sie die Ergebnisse.
c) Schreiben Sie weiterhin eine Methode (eine gewöhnliche statische Methode, kein Lambda), die überprüfen soll, ob für die betreffende Reise eine Freigabe erforderlich ist. Je nach Dienstreisevorschrift können unterschiedliche Regeln zur Anwendung kommen. Die Methode hat als Parameter eine Reise und ein Predicate. Wenn die Anwendung des Predicate für die Reise „true“ ergibt, dann soll auf der Konsole ausgegeben werden, dass für die Reise eine Freigabe erforderlich ist. Ansonsten soll ausgegeben werden, dass keine Freigabe erforderlich ist. Testen Sie die Methode mit verschiedenen Reisen und den beiden in b) geschriebenen Lambdas.
Eine Reise hat eine Distanz in Kilometern und ein Verkehrsmittel. Daraus sollen drei Dinge entstehen: der CO2-Ausstoß, zwei Prüfungen und eine Methode, die je nach Prüfung eine Freigabe verlangt.
Die Klassen Reise und Verkehrsmittel und die Datei FunktionenFuerReisen mit den Reisen liegen uns nicht vor. Wir schreiben sie knapp selbst. Die vier Reisen sind die aus der Musterlösung: 1000 km mit dem PKW, 500 km mit der Bahn, 5000 km und 800 km mit dem Flugzeug.
Function<T, R> nimmt ein Lambda auf, das aus einem Wert vom Typ T ein Ergebnis vom Typ R macht. Ein Predicate<T> macht aus einem T immer true oder false.- a) Ein Lambda vom Typ Function berechnet den CO2-Ausstoß jeder Reise.
- b) Zwei Lambdas vom Typ Predicate: Fernreise? Kurzstreckenflug?
- c) Eine Methode bekommt eine Reise und ein Predicate und meldet die Freigabe.