astillero:
Tengo un ArrayList que contiene lista de archivos, cuyos nombres son de hecho marcas de tiempo.
List<File> fileList = new ArrayList<>();
fileList.add(new File("20190612221053"));
fileList.add(new File("20190512221303"));
fileList.add(new File("20190612221353"));
fileList.add(new File("20190512222303"));
fileList.add(new File("20190612221303"));
El formato de la marca de tiempo es 'yyyymmddHHssmm'.
Mi objetivo es ordenar esta lista en el orden de las marcas de tiempo dados en los nombres de los archivos ascendente.
En consecuencia, estoy usando el método Collections.sort de la siguiente manera:
Collections.sort(fileList, new Comparator<File>() {
@Override
public int compare(File file1, File file2) {
Date timeStamp1=null,timeStamp2=null;
try {
timeStamp1 = new SimpleDateFormat("yyyymmddHHssmm").parse(file1.getName());
} catch (ParseException e) {
e.printStackTrace();
}
try {
timeStamp2 = new SimpleDateFormat("yyyymmddHHssmm").parse(file2.getName());
} catch (ParseException e) {
e.printStackTrace();
}
if(timeStamp1!=null && timeStamp2!=null && timeStamp1.getTime()!=timeStamp2.getTime() ) {
return (timeStamp1.getTime() > timeStamp2.getTime()) ? 1 : -1;
}
else {
return 0;
}
}
});
Obviamente después de esta línea, uno esperaría que la lista de artículos (archivos) a estar en el orden:
[20190512221303, 20190512222303, 20190612221053, 20190612221303, 20190612221353]
Pero en vez estoy recibiendo la orden:
[20190512221303, 20190612221303, 20190512222303, 20190612221053, 20190612221353]
Es evidente que algo va mal. Puede alguien señalar dónde estoy haciendo mal.
Jigar Joshi:
Hay dos grandes errores en el código
- lógica de comparación
Utilizar
Long.compare(timeStamp1.getTime(), timeStamp2.getTime());
hacer comparación adecuada de dos long
números
- patrón de fecha
cambiar mm
-> MM
para el mes.