Неправильный порядок при применении сортировки по имени

У меня есть несколько файлов в папке, хранящейся на устройстве Android.

Имя папки = английский/

Имена файлов = 001-001-0000.png, 001-001-000.png, 001-001-001.png, 001-001,002.png, 001-001-003.png ... до 001-001-010. png

Я должен загрузить их на экран в отсортированном порядке по имени. я использую этот код

String[] files = dir.list();
    Arrays.sort(files, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.compareToIgnoreCase(o2);
        }
    });

Результат, который я получил,

001-001-000.png 001-001-0000.png 001-001-001.png 001-001,002.png 001-001-003.png ... 001-001-010.png

Но когда я проверяю проводник на своем ПК с Windows, я получаю

001-001-0000.png 001-001-000.png 001-001-001.png 001-001,002.png 001-001-003.png ... 001-001-010.png

Разница здесь в том, что файл, который заканчивается четырьмя нулями (001-001-0000.png), предшествует файлу, который заканчивается тремя нулями (001-001-000.png), и мне нужен тот же порядок сортировки в моем коде.


person Karan Nagpal    schedule 22.08.2018    source источник
comment
Ваша сортировка правильная   -  person    schedule 22.08.2018


Ответы (2)


Попробуйте этот compare метод:

@Override
public int compare(String o1, String o2) {
    String o1_prefix = o1.split(".")[0];
    String o2_prefix = o2.split(".")[0];
    if(o1_prefix.startsWith(o2_prefix)) 
        return -1;
    else if(o2_prefix.startsWith(o1_prefix)) 
        return 1;
    else return o1.compareToIgnoreCase(o2);
}
person Susmit Agrawal    schedule 22.08.2018
comment
теперь лучше... - person Hearen; 22.08.2018
comment
Это сработало, спасибо - person Karan Nagpal; 22.08.2018

Причина, по которой Windows сортирует его таким образом, заключается в том, что Windows использует «числовую сортировку», начиная с Windows 7. Это означает, что Windows сортирует ваши файлы численно, увеличивая числовое значение. если вы не хотите, чтобы Windows сортировала в этом числовом порядке, вы можете отключить эту функцию.

Мой источник: http://www.alliancegroup.co.uk/windows7-explorer-sort-order.htm

person Donatic    schedule 22.08.2018