Trier par date décroissante de comparaison ne fonctionne pas comme prévu

En essayant de donner un sens à la sortie suivante:

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);
    }
}

La méthode getDate() renvoie un java.sql.Timestamp.

Voici la sortie avant le tri:

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

Et après:

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

Des idées pourquoi les deux objets ne soient pas classés correctement? Je suis en utilisant le JDBC MySQL mise en œuvre de ce Timestamp.

  • Pourquoi êtes-vous de tri sur l'horodatage de la soustraction? Plus précisément, quelle est la spec où elle est mise en œuvre?
  • java.sql.Timestamp implémente Comparable et a donc un compareTo() méthode. Pourquoi ne pas déléguer directement comme return comm1.getDate().compareTo(comm2.getDate());?
  • C'est la meilleure approche, et honnêtement je me sens stupide de ne pas y penser. C'est ce que je vais faire.
  • Vous êtes les bienvenus. Il ressemble que Pierre a copié cette réponse par la suite, donc je ne vais pas le rediffuser.
InformationsquelleAutor maple_shaft | 2013-01-02