Pouvez-vous me dire pourquoi le code fillowing:comportement étrange de compareTo (GregorianCalendar c)
int a = new GregorianCalendar(2015,3,31,7,45).compareTo(
new GregorianCalendar(2015,4,1,7,45);
System.out.println(a);
imprime 0?
Existe-t-il un moyen de le faire fonctionner correctement?
PS: Je dois trier des chaînes par date et j'utiliser ce comparateur:
array.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
GregorianCalendar cal1 = new GregorianCalendar(Integer.parseInt(o1.replaceAll(p, "$7")),
Integer.parseInt(o1.replaceAll(p, "$6")), Integer.parseInt(o1.replaceAll(p, "$5")),
Integer.parseInt(o1.replaceAll(p, "$8")), Integer.parseInt(o1.replaceAll(p, "$9")));
GregorianCalendar cal2 = new GregorianCalendar(Integer.parseInt(o2.replaceAll(p, "$7")),
Integer.parseInt(o2.replaceAll(p, "$6")), Integer.parseInt(o2.replaceAll(p, "$5")),
Integer.parseInt(o2.replaceAll(p, "$8")), Integer.parseInt(o2.replaceAll(p, "$9")));
return cal1.compareTo(cal2);
}
});
Il utilise des expressions régulières, mais il est trié correctement et que les dates fournies ne sont pas triées droit.
Oooh, voici l'astuce, les mois en Java sont basés sur 0 ... C'est vraiment bizarre. Merci d'avoir ouvert cette astuce pour moi! –
@DenisYakovenko: C'est le problème immédiat - mais s'il vous plaît ne prenez pas cette leçon. Il y a d'autres façons d'améliorer ce code de façon très significative ... –
Eh bien, le tri des tableaux n'est qu'une petite partie de la tâche, et je suis obligé d'utiliser Java 7, mais je m'en tiendrai à vos conseils) vous voulez dire par "très significativement"? Vous voulez dire que l'utilisation de regex de cette façon est trop chère? –