Сортировать ArrayList <String>по числовому значению - PullRequest
3 голосов
/ 16 сентября 2010

У меня есть ArrayList разрешений видео, который выглядит следующим образом:

"1024x768", "800x600", "1280x1024" и т. Д.

Я хочу отсортировать его по числовому значению в первой части строки. То есть вышесказанное будет выглядеть так:

"800х600", "1024x768", "1280x1024"

Есть ли быстрый и грязный способ сделать это, имея в виду менее 2-3 строк кода? Если нет, то что будет правильным? Значения, которые я получаю, получены от объекта, а не от меня. У него есть методы getWidth () и getHeight (), которые возвращают целые числа.

Ответы [ 5 ]

5 голосов
/ 16 сентября 2010

Если объекты в массиве являются Resolution экземплярами с getWidth методами, то вы можете использовать Comparator для сортировки по ним:

Collections.sort(resolutions, new Comparator {
    public int compare(Resolution r1, Resolution r2) {
        return Integer.valueOf(r1.getWidth()).compareTo(Integer.valueOf(r2.getWidth()));
    }
});
0 голосов
/ 16 сентября 2010

Решение, предложенное Шэдвеллом в его ответе , является правильным и идиоматичным.

Но если вы ищете более сжатое решение, то я бы посоветовал вам использовать lambdaj , который позволит вам писать код вроде:

List<Resolution> sortedResolutions = sort(resolutions, on(Resolution.class).getWidth());
0 голосов
/ 16 сентября 2010

Используйте собственный компаратор для сортировки ArrayList через API коллекций.

Collections.sort(resolutionArrayList, new ResolutionComparator())
0 голосов
/ 16 сентября 2010

Использование компаратора будет работать, но будет медленным, если у вас много значений, потому что он будет анализировать каждую строку более одного раза.

Альтернативой является добавление каждого значения в TreeMap с номером, который вы хотите использовать в качестве ключа, то есть Integer.valueOf(s.substring(0,s.indexOf('x'))), а затем создание нового ArrayList из отсортированных значений в treeMap.values().

0 голосов
/ 16 сентября 2010

Правильный способ - написать реализацию Comparator, которая работает со строками, за исключением того, что она анализирует до первого нечислового символа.Затем он создает int из этого и сравнивает целые числа.

Затем вы можете передать экземпляр этого Comparator в Collections.sort () вместе с вашим List.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...