Bonjour,
je cherche a trier alphabetiquement une liste de fichier en utilisant bien evidemment leurs noms.
J'utilise la classe Comparator avec un code specifique pour qu'au final la liste soit trier de telle facon que les dossiers soient reorganises alphabetiquement mais situe en premier dans la liste puis ensuite les fichiers.
Les dossiers sont biens tries mais quand on en vient au fichier, il y a un groupe de 4/5 fichiers dans la liste qui se retrouve trier mais en dernier dans la liste.
J'ai essaye un simple compararTo uniquement sur la liste des fichiers et j'obtiens le meme reordering donc ce n'est apparemment ma methode qui distingue fichier ou dossier qui pose probleme lorsque je les trie.
En revanche, si je fais un Collections.sort(Liste), la les fichiers sont bien reorganises alphabetiquement.....
Donc le probleme vient bien du comparator mais c est bizarre car les nombreux exemple que j ai pu voir pour comparer des strings implementait uniquement un return string1.compareTo(string2)
Merci pour votre aide et bonne journee,
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 public class NameComparator implements Comparator, Serializable{ public int compare(Object fileName1, Object fileName2){ int response=0; File file1 = (File)fileName1; File file2 = (File)fileName2; String name1 = file1.getName(); String name2 = file2.getName(); if(name1.equals("Parent Directory")) response = 1; else if(name2.equals("Parent Directory")) response = -1; else if(file1.isDirectory() && file2.isFile()) response = -1; else if(file2.isDirectory() && file1.isFile()) response = 1; else if(file1.isDirectory() && file2.isDirectory()) { if(name1.compareTo(name2) > 0) response = 1; } else if(file1.isFile() && file2.isFile()) { if(name1.compareTo(name2) > 0) response = 1; } if(name1.compareTo(name2) > 0) response = 1; else response =-1; //System.out.println(name1 + " comparedTo " + name2 + " : " + String.valueOf(response)); return response; }
Antoine.
Partager