vorrei imparare ad usare Comparator.
questa è la mia classe:
codice:
import java.io.*;
import java.util.*;
public class ListDir implements Comparator {
public static void main(String args[]) throws FileNotFoundException {
File dir = new File("/Volumes/MATTE/Dir");
String lista = ListDir.sortList(dir);
System.out.println(lista);
}
public static List<File> listingDir(File dir) {
List<File> file = new ArrayList<File>();
File[] elementi = dir.listFiles();
for (File files : elementi) {
file.add(files);
if (files.isDirectory()) {
List<File> otherDir = listingDir(files);
file.addAll(otherDir);
}
}
return file;
}
public static String sortList(File dir) throws FileNotFoundException {
validateDir(dir);
List<File> file = listingDir(dir);
String result = "";
Collections.sort(file);
for (File files : file) {
result += files.getAbsolutePath() + "\n";
}
return result;
}
private static void validateDir(File dir) throws FileNotFoundException {
if (dir == null) {
throw new IllegalArgumentException("Directory should not be null.");
}
if (!dir.exists()) {
throw new FileNotFoundException("Directory does not exist: " + dir);
}
if (!dir.isDirectory()) {
throw new IllegalArgumentException("Is not a directory: " + dir);
}
if (!dir.canRead()) {
throw new IllegalArgumentException("Directory cannot be read: " + dir);
}
}
}
so che devo implementare uno dei due metodi di comparator.
ho visto un pò in giro l'uso di compare.
ad esempio (dovrebbe ordinare dei numeri ma nn è il mio caso, lo prendo solo come esempio):
codice:
public int compare(Object obj1, Object obj2) {
ListDir c1 = (ListDir) obj1;
ListDir c2 = (ListDir) obj2;
int s1 = c1.getA() + c1.getB();
int s2 = c2.getA() + c2.getB();
return s1 - s2;
}
ho alcuni problemi.
innanzitutto mi conviene usare compare sul metodo listingDir che ritorna una List<File> o su sortDir che ritorna una String?
io ho pensato fosse meglio su sortDir in quanto andrei a sotituire Collections.sort().
e poi come vado a sostituire gli int con le String?