Exercice
Récupérer une liste de valeurs triée provenant d’une base de données est très simple grâce au mot clé SQL ORDER BY, ex :
[sql]SELECT a,b,c,d,e,f FROM ma_table ORDER BY a,c,e[/sql]Qu’en est-il en Java pour trier nos listes de façon multiple ? Existe-t’il un tel mot clé ? non bien entendu. Cet article va vous présenter une façon de procéder en utilisant les méthodes sort() de la classe java.util.Collections ainsi qu’une classe de comparaison java.util.Comparator qui nous permettront ensemble d’appliquer des tris successifs à nos listes de type java.util.Collection (List, Vector, etc.).
Tri unique
Si vous souhaitez trier votre liste de façon unique (tri par défaut), il suffit d’utiliser la méthode Collections.sort(votre_liste_dobjets) en considérant que les éléments de votre liste soient de type java.lang.Comparable, voici un exemple rapide :
[java] public class Essai { public static void main(String[] args) {
List<VotreClasse> list = new ArrayList<VotreClasse>();
list.add(new VotreClasse("caméléon"));
list.add(new VotreClasse("uranium"));
list.add(new VotreClasse("pays"));
list.add(new VotreClasse("dentiste"));
Collections.sort(list);
for (VotreClasse vc : list) {
System.out.println(vc.getAttribut());
}
}
}
class VotreClasse implements Comparable<VotreClasse> {
private String attribut;
public VotreClasse(String attribut) {
this.attribut = attribut;
}
public int compareTo(VotreClasse classeToCompare) {
return attribut.compareTo(classeToCompare.attribut);
}
public String getAttribut() {
return attribut;
}
}
[/java]
Résultat
[plain] caméléondentiste
pays
uranium
[/plain]
Tris multiple
Contrairement au tri unique où l’interface Comparable suffit, appliquer plusieurs tris successifs est un peu plus compliqué, pour cela il vaut mieux utiliser une classe de comparaison de type Comparator, celle-ci, beaucoup plus souple, va nous permettre d’appliquer nos tris entre deux objets, exemple :
- Classe de comparaison qui permet de trier par power puis par thougness puis par rarity puis par name (ORDER BY power, thoungess, rarity, name) :
public int compare(CardRemote card1, CardRemote card2) {
int powerCompare = card1.getPower().compareTo(card2.getPower());
int thougnessCompare = card1.getThougness().compareTo(card2.getThougness());
int nameCompare = card1.getName().compareTo(card2.getName());
int rarityCompare = card1.getRarity().getOrder().compareTo(card2.getRarity().getOrder());
int compared = powerCompare;
if (compared == 0) {
compared = thougnessCompare;
if (compared == 0) {
compared = rarityCompare;
if (compared == 0) {
compared = nameCompare;
}
}
}
return compared;
}
}
[/java]
- Classe de vos objets à trier :
private String name;
private String power;
private String thougness;
private RarityRemote rarity;
// getters and setters</pre>
}
[/java]
- Appel du tri :
Collections.sort(cardsRemoteList, new CardAllComparator());
[/java]
Thx pour l’article – Ding !