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

Mit einem Comparator arbeiten

Testen Sie unsere 1983 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Beim Interface Comparator handelt es sich – ebenso wie bei Comparable – um eine Möglichkeit, Objekte miteinander zu vergleichen, um so die Sortierfolge innerhalb einer Liste festzulegen. Anders als bei Comparable, geht es bei Comparator nicht nur ums Natural Ordering: Comparator bietet zusätzlich die Möglichkeit, weitere für den jeweiligen Zweck erforderliche Rangordnungen festzulegen. Ein weiterer Vorteil: Beliebig viele Comparator-Klassen können definiert werden, um unterschiedlichste Sortierfolgen zu realisieren.

Transkript

In diesem Video stelle ich Ihnen das Interface Comparator vor. Genauso wie das Interface Comparable bietet auch der Comparator eine Möglichkeit, Objekte miteinander zu vergleichen, um hiermit die Positionierung innerhalb einer Datenreihe festzustellen. Allerdings handelt es sich beim Comparator um einen Vergleich, der sich nicht nach dem Natural Ordering des Comparables richten muss. Beispielsweise ordnen wir unsere Katzen mit dem Interface Comparable nach ihrem Namen. Und hiermit haben wir erklärt, dass sich das Natural Ordering der Klasse Katze, nach dem Namen der Katze richtet. Wenn wir aber die Katzen zusätzlich nach ihrer Groesse sortieren wollten. Würden wir eine solche außerordentliche Anordnung mit der Klasse Comparator umsetzen. Genauso wie Comparable handelt es sich bei dem Comparator ebenso um ein Interface. Allerdings wird das Interface nicht von der Klasse implementiert, die sortiert werden soll. Sondern man würde eher eine separate Klasse erzeugen, die das Interface Comparator implementiert. Ich erzeuge deswegen hier in Eclipse eine neue Klasse, indem ich auf File New Class klicke. Und die Klasse nenne ich KatzenComparator. Am besten verschiebe ich die Klasse KatzenComparator mal in das Package Model. Dann liegt sie hier mit der Katze mit drin. So und jetzt muss die Klasse KatzenComparator das Interface Comparator implementieren. Also implements und dann Comparator und den Typ Parameter parametrisiere ich mit dem Datentyp Katze. Und jetzt weist mich Eclipse folgerichtig daraufhin, dass ich die abstrakte Methode Compare überschreiben muss. Deshalb lasse ich mir von Eclipse helfen. Gehe mit der Maus also über den Klassenbezeichner und wähle Add Unimplemented Methods. Und innerhalb der Methode Compare, muss ich jetzt den Vergleich der Groessen durchführen. Nun könnte ich mir die groesse der Katze o1 und die groesse der Katze o2 besorgen und diese beiden Werte über Vergleichsoperatoren miteinander in einem Algorithmus miteinander vergleichen. Also wenn sie größer sind, dann positiv, dann würde ich ein +1 zurückgeben oder wenn die gleich sind, eine null oder bei negativ eine -1 und so weiter. Aber das brauche ich nicht, denn die Wrapper Klasse Double bietet Klassen Methode mit dem Namen Compare an, in der genau diese Vergleiche schon berücksichtigt worden sind. Deshalb rufe ich einfach nur diese Klassen Methode innerhalb der Methode Compare auf und zwar hier hinter dem Schlüsselwort return. Ich sage also Double. und dann compare und hier setze ich dann rein, o1. das ist ja die erste Katze .getMessung().getGroesse() und das gleiche mach ich auch mit der Katze o2. Also O2.getMessung().getGroesse(). Und jetzt wechsle ich in die Klasse App, wo wir die Katzen bereits sortiert nach Namen ausgeben. Um die Katzen nun zusätzlich nach ihrer Groesse zu sortieren und nach Groesse sortiert auszugeben, kopiere ich mal diesen ganzen Block und passe auch den einzeiligen Kommentar an. Gebe die Katzen sortiert nach der Größe aus. So und jetzt füge ich bei der Methode sort hier unten, wo ich die Katzen nach der Größe sortieren möchte, die Instanz der Klassen Katzen Operator als zweiten Parameter hinzu. Ich erzeuge also einen neuen Instanz. new KatzenComparator() und schon habe ich dafür gesorgt, dass hier nicht das Natural Ordering beim Sortieren berücksichtigt wird, sondern die Sortierung des zweiten Parameters des Typs Comparator beziehungsweise in unserem speziellen Fall KatzenComparator(). Und das probieren wir einmal aus. So und jetzt sehen Sei bei den ersten fünf Zeilen, dass die Katzen nach dem Namen sortiert worden sind, alphabetisch also und hier sehen Sie, dass die Katzen nach der Groesse sortiert worden sind. In diesem Video habe ich Ihnen das Interface Comparator vorgestellt. Bei dem Interface Comparator handelt es sich genauso, wie bei dem Interface Comparable, um eine Möglichkeit Objekte miteinander zu vergleichen, um hiermit die Sortierfolge innerhalb einer Liste festzulegen Aber anders, als bei dem Comparable, geht es bi dem Comparator nicht um das Natural Ordering. Stattdessen bietet der Comparator neben dem Natural Ordering die Möglichkeit, weitere für den jeweiligen Zweck erforderliche Rangordnungen festzulegen. Ein weiterer Vorteil eines Comparators ist, dass beliebig viele Comparator Klassen definiert werden können, um hiermit unterschiedlichste Sortierfolgen zu realisieren.

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!