Java Comparator schreiben?

2 Antworten

Am Anfang würde ich überprüfen, ob o1 und o2 null sind und würde dann einen sinnigen Wert zurück geben. Beim Compare würde ich o1 und o2 vertauschen, dann sortiert er vermutlich richtig. Eine try...catch Klammer wäre auch nicht schlecht


regex9  06.06.2021, 16:50

Für welchen Fall benötigst du try-catch?

0
Erstens, wie geht man dort mit null um? Oder ist das egal?

Das ist nicht egal; du kannst dich entscheiden was das gewünschte Verhalten ist. Die Spezifikation von Comparator<T>.compare() erlaubt dir das: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Comparator.html#compare(T,T)

In vielen Fällen ist es durchaus sinnvoll, eine NullPointerException zu werfen statt stillschweigend irgendein Ersatzverhalten zu implementieren, das zu überraschenden Ergebnissen führt. Mit Objects.requireNonNull() geht das kurz.

Der obige Code sortiert falsch herum. Wie macht man das jetzt am besten.

Ich verstehe nicht ganz. Wenn compare() das falsche Vorzeichen liefert, dann dreh halt drin die Vorzeichen oder die Reihenfolge um.


gamestar4124 
Beitragsersteller
 06.06.2021, 17:04

Wenn ich object.requireNonNull verwende schlägt mich mein prof vermutlich noch, da wir nur das verwenden dürfen, was wir gelernt haben 😂

Das würde assert false bedeuten in meinem Fall ._.

Das mit dem Vorzeichen hab ich gemeint mit *-1 :) scheint wohl dann das beste zu sein

Würdest du den Code noch anders schreiben (also bis auf die null checks?)

0
alfredo153  06.06.2021, 17:15
@gamestar4124

Rank und Suit scheinen doch enums zu sein, und die sind schon selbst Comparable. D.h. es sollte reichen, sie direkt mit compareTo() zu vergleichen, statt selber mit getOrdinal() herumzufuhrwerken. Damit wird der Code schon mal kürzer und lesbarer.

Am Schluss kannst du dir die Zuweisung zu comparedValue sparen.

Wenn ich sowas selber implementieren müsste, würde ich vermutlich zu Comparator.comparing() greifen. Aber das dürft ihr dann wohl nicht.

1