Bonjour,
J'ai besoin de trier une List.
Pour cela j'ai implémenté ma classe avec la méthode compareTo(..);
Cependant j'ai besoin de la trier de nouveau dans un ordre différent.
Comment faire ???
Merci
Bonjour,
J'ai besoin de trier une List.
Pour cela j'ai implémenté ma classe avec la méthode compareTo(..);
Cependant j'ai besoin de la trier de nouveau dans un ordre différent.
Comment faire ???
Merci
Salut,
Utilises les Comparator
a++
Tu a la function arrays.sort(tableau);
qui est bien pratique aussi
![]()
Salut,
Pour changer dynamiquement "ta façon de trier", tu peux t'intéresser au modèle de conception état (state pattern). En fonction de la situation dans laquelle tu te trouves, tu utilises un comparateur approprié.
Bonne continuation.
Quel est le problème exactement ? Car il n'y a rien de bien compliqué :
- Pour chaque type de tri que tu veux, tu écris une classe qui implémente Comparator et qui met en place la comparaison de ton choix
- Tu utilises Collections.sort(List,Comparator) pour effectuer le tri
a++
D'acord mais je ne vois pas tout encore excatement.
Lorsque j'ai un tri je fais hérité ma classe 'voiture' de l'interface comparator en implémentant la méthode compareTo. Puis j'utilise Collections.sort(List)
maintenant que j'en ai plusieurs tu me dis d'écrire ma classe Compare qui implémente Comparator, d'écrire plusieurs classes compareTo1, compareTo2...
et d'appeler la methode Collections.sort(List,Comparator.compareTo1)???
Merci
D'accord, donc je fais hérité ma classe 'vehicule' de la classe 'Comparator' et j'implémente 2 méthode compareTo1 et compareTo2.
ensuite j'appelle Collections.sort(List,Comparator.compareTo1) ???
merci
AdiGuba: reste calme ;-)
xduris: un forum comme celui de développez n'empêche pas les gens de lire/apprendre/comprendre. Pour l'utilisation des collections, je te conseille vivement le tutoriel de SUN.
Sinon, puisque tu ne vas pas lire, voici de quoi t'aider un peu:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public class StringExample { /** * @param args */ public static void main(String[] args) { List<String> maxime = new ArrayList<String>(Arrays.asList(new String[] {"to", "be", "or", "not", "to", "be", "that", "is", "the", "question"})); System.out.println("STD:" + maxime); Collections.sort(maxime, new Comparator<String>() { // Un comparateur sur la première lettre des mots // Avec ce comparateur une chaine est "plus grande" qu'une autre si sa première lettre est plus loin dans l'alphabet" public int compare(String s1, String s2) { return s1.charAt(0) - s2.charAt(0); } }); System.out.println("CMP1:" + maxime); Collections.sort(maxime, new Comparator<String>() { // Un comparateur sur la dernière lettre des mots // Avec ce comparateur une chaine est "plus grande" qu'une autre si sa dernière lettre est plus loin dans l'alphabet" public int compare(String s1, String s2) { return s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1); } }); System.out.println("CMP2:" + maxime); } }
J'ai résolu mon pb.
Voilà la solution.
j'ai créé une classe TrucDtoComparator
Ensuite lorsque je souhaite trié ma collection je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 package dto; import java.util.Comparator; import com.inetpsa.voz.dto.TrucDto; /** * comparatorTruc * */ public class TrucDtoComparator implements Comparator<Object> { /** * compare * * @param o1 * o1 * @param o2 * o2 * @return int */ public int compare(Object o1, Object o2) { TrucDto trucDto1 = (TrucDto) o1; TrucDto trucDto2 = (TrucDto) o2; if (trucDto1 != null && trucDto2 != null && trucDto1.getDate() != null && trucDto2.getDate() != null) { return trucDto1.getDate().compareTo(trucDto2.getDate()); } else if (trucDto1.getDate() != null) { return -1; } else { return 1; } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part Collections.sort(trucDtoList, new TrucDtoComparator());
Partager