Incapaz de lista de archivos en el que el nombre de archivo contendría la marca de tiempo usando Colecciones ordenar (Java)

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

  1. lógica de comparación

Utilizar

Long.compare(timeStamp1.getTime(), timeStamp2.getTime());

hacer comparación adecuada de dos longnúmeros

  1. patrón de fecha

cambiar mm-> MMpara el mes.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=228286&siteId=1
Recomendado
Clasificación