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 54 55 56 57 58 59 60 61 62 63 64 65 66
| public class DemoTriList {
public static void main(String[] args) {
List<String> data = new ArrayList<>(Arrays.asList("arbre 0.56887", "deee 12.589",
"cfdss 3.589", "dett 6.589155", "dfrzz 5.69875" ));
afficher(data);
trier(data);
System.out.println();
System.out.println("Données triées :");
afficher(data);
}
private static void trier(List<String> data) {
// pour éviter de parser et de convertir le nombre à chaque fois, on va
// convertir les data une fois (mais on pourrait le faire directement
// dans la méthode compare du Comparator (ce qui pourrait nous permettre de ne pas passer par une liste intermédiaire)
class Data {
public final String ligne;
public final Float valeur;
public Data(String ligne) {
// on stocke la ligne pour restituer la liste à la fin
this.ligne = ligne;
// on convertit le nombre qui se trouve en seconde position dans une ligne où les informations sont séparés par une espace
this.valeur = Float.valueOf(ligne.split(" ")[1]);
}
}
// on créé une liste avec nos informations adaptées au tri
List<Data> listeATrier = new ArrayList<>(data.size());
for(String ligne : data) {
listeATrier.add(new Data(ligne));
}
// on fait le tri
Collections.sort(listeATrier, new Comparator<Data>() {
@Override
public int compare(Data d1, Data d2) {
// l'ordre de tri correspond à l'ordre des valeurs
// le - est parce que le tri est décroissant
return -d1.valeur.compareTo(d2.valeur);
}
});
// on remet à jour la liste
data.clear();
for(Data ligne : listeATrier) {
data.add(ligne.ligne);
}
}
private static void afficher(List<String> data) {
for (String ligne : data) {
System.out.println(ligne);
}
}
} |