Quindi Comparator posso implementarlo in qualsiasi classe? E quindi per dare all'utente la possibilità di scegliere secondo quale criterio ordinare il Vector dovrei creare (in una classe) un metodo diverso per ogni criterio di confronto giusto?
Ad esempio potrei implementare la seguente classe:
codice:
class Comparator implements Comparator{
public int compareDim(Object dim1, Object dim2){
Int dim1Lung = ( (FileInfo) dim1 ).getDimensione();
Int dim2Lung = ( (FileInfo) dim2 ).getDimensione();
return dim1Lung.compareTo(dim2Lung);
}
public int compareDir (Object dir1, Object dir2){
String dir1alf = ( (FileInfo) dir1 ).getDirectory();
String dir2alf = ( (FileInfo) dir2 ).getDirectory();
return dir1alf.compareTo(dir2alf);
}
public int compareDirNom (Object dirNom1, Object dirNom2){
String dir1 = ( (FileInfo) dirNom1 ).getDirectory();
String dir2 = ( (FileInfo) dirNom2 ).getDirectoy();
int confrontaDirectory = dir1.compareTo(dir2);
if (confrontaDirectory != 0){
return confrontaDirectory;
}
String nom1 = ( (FileInfo) diNom1 ).getNome();
String nom2 = ( (FileInfo) diNom2 ).getNome();
return nom1.compareTo(nom2);
}
}
E per ordinare gli elementi in base a directory+nome, nella classe dove mi serve, dovrei inserire questo codice?
codice:
Collections.sort(v, new Comparator.compareDirNom() );
E, giusto per concludere, se volessi ricercare il file di nome ELEM, dovrei inserire questo codice (ovviamente creando il metodo compareNom nella mia classe Comparator) giusto ?
codice:
Collections.sort(v, new Comparator.compareNom() );
Collections.binarySearch(v, ELEM)
In questo modo mi riporterebbe l'indice (integer) di "v" in cui ha trovato un FileInfo il cui campo Nome sia uguale ad ELEM.....ma ipotizzando che esistano 3 file ELEM in 3 diverse cartelle e che io voglia sapere la posizione non del primo che trova ma di ognuno di essi, come dovrei fare?