Java Comparator per file e directory
In questo articolo vi spiego come implementare un Camparator per i file e le directory.
Lo scenario è: ho una classe che lista tutti i file e le (sotto)directory di una determinata cartella e voglio che vengano ordinate prima le directory per nome e poi i file per nome.
Un ordinamento classico insomma.
Useremo l'interfaccia pubblica Camparator che serve per ordinare le collezioni.
Questo poi sarà invocato dove vogliamo attraverso i metodi di sorting come Arrays.sort (per gli array) e Collections.sort (per le collezioni).
In pratica così facendo imponiamo noi che ordinamento passare ai metodi sort.
Comparator ha solo due metodi e noi andremo a sovrascrivere il metodo compare (T f1, T f2).
A noi interessano oggetti File.
Vediamo il codice:
public class MyComparator implements Comparator<File> {
public int compare(File f1, File f2) {
if (f1.isFile() && f2.isDirectory()) {
return 1;
} else if (f1.isDirectory() && f2.isFile()) {
return -1;
} else {
return f1.getName().compareTo(f2.getName());
}
}
}
La classe implementa Comparator.
Il metodo compare ha due parametri File che sono quelli che andremo a confrontare.
Per ordinare prima le directory e poi i file va fatto un test per vedere se sono uno o l'altro con isDirectory e isFile che restituiscono un boolean.
I primi due test controllano se uno è file e l'altro è directory.
Se f1 è un file e f2 è directory allora il metodo restituisce 1e il file è trattato come "maggiore" della directory.
Il secondo test restituisce l'esatto contrario.
L'ultimo test controlla se entrambi sono file o directory, e in caso paragona per nome col metodo getName.
In questo caso il test restituisce true o false per entrambi e quindi non servono altri test.
Enjoy!
java comparator compare file directory collec
Commentami!