Eclipse Mit Comparator nach 2 Kriterien sortieren

EmmaM95

Mitglied
Die Aufgabe sieht so aus:
Die Klasse EntryByDateComparator ordnet zwei Einträge anhand ihres Datums. Die Klasse wird ebenfalls von
java.util.Comparator<Entry> abgeleitet und überschreibt die Methode public int compare(Entry entry1, Entry entry2)
so dass sie zwei Einträge anhand ihres Datums ordnet.

Das ist meine Lösung, die aber nicht funktioniert:
public class EntryByCarAndDateComparator implements Comparator<Entry> {

public int compare(Entry entry1, Entry entry2) {
LocalDate date1 = entry1.getDate();
LocalDate date2 = entry2.getDate();

if (entry1.getCar().getDescription()
.compareTo(entry2.getCar().getDescription()) == 0) {

return (date1 == date2 ? 0 : date1.compareTo(date2));
}
if (entry1.getCar().getDescription() == null) {
return -1;
} else if (entry2.getCar().getDescription() == null) {
return -1;
}
return 0;

}

}
 

BRoll

Bekanntes Mitglied
Was funktioniert denn nicht. Sieht auf den ersten Blick nicht falsch aus, wobei die Überprüfungen auf null zuerst gemacht werden sollten.
 

EmmaM95

Mitglied
Ich habe oben aus versehen die falsche Aufgabenstellung eingegeben. Das ist die richtige:
Die Klasse wird von java.util.Comparator<Entry> abgeleitet und überschreibt die Methode public int compare(Entry entry1, Entry entry2)
so dass Sie zwei Einträge zunächst anhand des Autos und bei Übereinstimmung anhand des Datums ordnet.

Wir müssen das dann Testen und der Test gibt aus:
java.lang.AssertionError: compare(Audi A1[Gasoline]:10.04.2014 40.00€, 33.00l, 500.00km, 0.08€/km (Urlaub), VW Golf[Gasoline]:10.04.2014 40.00€, 33.00l, 500.00km, 0.08€/km (Urlaub)) should give a value < 0
Expected: a value less than <0>
but: <0> was equal to <0>


Audi A1 entspricht getDescription.
 

BRoll

Bekanntes Mitglied
Machs mal bitte in code-tags und gib die richtige zeilennummer des fehlers noch an :)
Ansonsten beschreibt doch das den fehler:
should give a value < 0
Expected: a value less than <0>
but: <0> was equal to <0>
Ich seh bloß nicht von hier wo er die zahlen herbekommt.
 

Dompteur

Top Contributor
Der Test funktioniert nur für den Fall, dass die Automarken gleich sind. Dann lieferst du als Ergebnis den Vergleich der beiden Datumswerte.
Danach macht du nur mehr die Behandlung der Nullwerte für die Automarken.

Es fehlt aber der Vergleich der Automarken auf größer/kleiner.

Wie schon hier in einem anderen Beitrag steht, solltest du die Nullwertbehandlung zuerst machen.
 

Oben