Sortieren nach Datum absteigend Komparator funktioniert nicht wie erwartet

Versuche den Sinn der folgenden Ausgabe:

public class CommunicationComparator implements Comparator<Communication> {
    @Override
    public int compare(Communication comm1, Communication comm2) {
        long t1 = comm1.getDate().getTime();
        long t2 = comm2.getDate().getTime();
        return (int) (t2 - t1);
    }
}

Die Methode getDate() liefert eine java.sql.Timestamp.

Hier ist die Ausgabe vor dem Sortieren:

for (Communication n : retVal) {
    System.out.println(n.getDate().toString());
}

2012-10-03 10:02:02.0
2012-10-07 03:02:01.0
2012-10-08 13:02:02.0
2012-10-09 03:02:00.0
2012-11-26 10:02:05.0
2012-11-28 11:28:11.0
2012-12-03 12:03:01.0
2012-12-06 15:03:01.0
2012-12-13 14:03:00.0
2012-12-28 11:03:00.0
2012-12-28 13:49:21.0

Und nach:

Collections.sort(retVal, new CommunicationsComparator());

2012-12-13 14:03:00.0
2012-12-06 15:03:01.0
2012-12-03 12:03:01.0
2012-11-28 11:28:11.0
2012-10-09 03:02:00.0
2012-10-08 13:02:02.0
2012-11-26 10:02:05.0
2012-10-07 03:02:01.0
2012-10-03 10:02:02.0
2012-12-28 13:49:21.0
2012-12-28 11:03:00.0

Irgendwelche Ideen, warum die beiden unteren Objekte möglicherweise nicht korrekt sortiert werden? Ich bin mit dem MySQL-JDBC-Implementierung dieses Zeitstempels.

Warum sind Sie die Sortierung nach timestamp der Subtraktion? Genauer gesagt, was ist der spec, wo dies umgesetzt wird?
java.sql.Timestamp implementiert Comparable und hat damit einen compareTo() Methode. Warum nicht delegieren direkt wie return comm1.getDate().compareTo(comm2.getDate());?
Das ist der beste Ansatz, und ehrlich gesagt fühle ich mich dumm, nicht darüber nachzudenken. Dies ist, was ich tun werde.
Du bist herzlich willkommen. Es so Aussehen, dass Peter kopiert hat diese Antwort danach, also werde ich nicht umbuchen es.

InformationsquelleAutor maple_shaft | 2013-01-02

Schreibe einen Kommentar