Bonsoir à tous,
Je galère quelque peu avec le tri d'une collection... J'ai une classe MaClasse qui contient différentes variables de classe. Je récupère en base de données une liste d'objets MaClasse et je souhaiterais que cette liste soit triée selon l'une des variables de cette classe. Je précise tout de suite que je ne peux pas faire le tri directement en SQL, cette donnée étant calculée via des règles de gestion trop complexes à coder dans la requête.
La classe MaClasse implémente Comparable et redéfinit donc la méthode compareTo(), ainsi que la méthode equals(). Voir l'extrait de code ci-dessous:
Le tri doit se faire de la manière suivante:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 public class MaClasse implements Comparable { private final char type; public final char getType() { return this.type; } public final void setType(final char newType) { this.type = newType; } @Override public final int compareTo(final MaClasse other) { final char thisType = this.getType(); final char otherType = other.getType(); int result = 0; if(this.equals(other)) { result = 0; } else if(thisType == 'P') { result = 1; } else if(thisType == 'S') { if(otherType == 'P') { result = -1; } else if(otherType == 'A') { result = 1; } } else if(thisType == 'A') { if(otherType == 'P' || otherType == 'S') { result = -1; } else { result = 0; } } return result; } @Override public final boolean equals(final Object other) { Boolean equals = null; if(other instanceof MaClasse) { final MaClasse tmp = (MaClasse) other; equals = (this.getType() == tmp.getType()); } else { equals = Boolean.FALSE; } return equals; } }
Je fais ce tri via la méthode statique Collections.sort(). A l'exécution, ma liste n'est jamais triée comme il le faudrait, les objets apparaissent dans le désordre !!!
- d'abord les objets dont le type est 'P'
- ensuite les objets dont le type est 'S'
- enfin les objets dont le type est 'A'
Pourtant en debug, la méthode compareTo() me retourne bien les valeurs adéquates...
Aurais-je loupé quelque chose ??? Si quelqu'un a la moindre idée sur le pourquoi du comment, je suis preneur ! D'avance merci![]()
Partager