La commande par jour. Comparateur. Java
le prochain extrait de cette java tutoriel, compare le deuxième argument de l'objet de la première plutôt que vice versa.
*La méthode de la date d'embauche() renvoie un objet Date, ce qui signifie la date d'embauche de l'employé.
import java.util.*;
public class EmpSort {
static final Comparator<Employee> SENIORITY_ORDER =
new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
return e2.hireDate().compareTo(e1.hireDate());
}
};
Voici le tutoriel java explication:
Noter que le Comparateur passe à la date d'embauche de son second argument
pour sa première plutôt que vice versa. La raison en est que l'employé
qui a été embauché récemment est la moins haute; le tri dans l'ordre
de la date d'embauche serait de mettre la liste dans le sens inverse de l'ordre d'ancienneté.
Encore, je ne comprends pas pourquoi en inversant e1 et e2 dans compareTo
il devrait résoudre le problème.
D'autres précisions?
Merci d'avance.
OriginalL'auteur Rollerball | 2013-04-02
Vous devez vous connecter pour publier un commentaire.
L'ordre naturel sur les dates (tel que défini par
compareTo
), c'est que la date est "plus grand que" la plus tôt un. Pour l'ancienneté de la personne qui a été là le plus est plus haute, c'est à dire que vous voulez le plus tôt date de début pour signifier une plus grande ancienneté que le plus tard.Puisque le contrat de
Comparator
stipule que sicompare(a,b) != 0
puiscompare(a,b)
etcompare(b,a)
doit avoir de signe opposé, vous avez deux choix de mettre en œuvre un inverse a ordonné la comparaison dea
etb
- retour-(a.compareTo(b))
oub.compareTo(a)
- ils sont la garantie d'avoir le même signe.Ils n'auront pas nécessairement la même valeur, mais la seule chose qui compte pour la comparaison des résultats est de savoir s'ils sont
>
,<
ou==
0 - tandis que de nombreux exemples d'utilisation-1
,0
et+1
une valeur avec le bon signe est très bien.à la fin, il compte qu'il est mis en par la méthode de l'utilisateur.
Je ne comprends pas ce que vous demandez. L'extrait de code que vous avez fournies à la question c'est juste un moyen de définir un comparateur qui peut prendre deux employés et de vous dire laquelle est la plus haute en choisissant celui avec le plus haut
hireDate()
, ce n'est pas "compter" quoi que ce soit.Je ne comprends pas pourquoi il est important de e2.date d'embauche().compareTo(e1.date d'embauche()) c'est différent de e1.date d'embauche().compareTo(e2.date d'embauche()). Je ne sais pas à l'avance lequel des deux objets est l'aîné ou cadet (en termes d'ancienneté). J'ai pu obtenir un positif ou un négatif de la valeur de compareTo.
si vous avez une liste des employés et triés de cette liste avec un élément de comparaison qui n'a
e1.hireDate().compareTo(e2.hireDate())
alors vous amenaient à être commandés à partir de la plus haute à la plus haute (c'est à dire dans inverse ordre d'ancienneté). Si vous triez pare2.hireDate().compareTo(e1.hireDate())
vous obtenez leur a ordonné de moins supérieurs à la plupart des hauts.OriginalL'auteur Ian Roberts
Si vous souhaitez modifier l'ordre de tri, puis utiliser:
Ne jouez pas avec le Comparateur.
OriginalL'auteur camickr
Comparateur de
compare
méthode s'attend à les retourner -1, 0 ou 1 sie1<e2
,e1==e2
, oue1>e2
. Donc, si la dernière commande que vous obtenez est juste l'inverse de désiré, il suffit d'inverser a et b résout le problème.OriginalL'auteur Miguel Prz