Как отсортировать индивидуальный просмотр списка по алфавиту?

1

У меня есть представление пользовательского списка с ImageView и текстовым просмотром. Я просматриваю этот список по этому методу:

private List<Currency> getModel() {
        List<Currency> list = new ArrayList<Currency>();
        for (int i = 0; i < countryCode.length; i++) {

            list.add(get(countryCode[i], flag[i]));
        }


        return list;
    } 

этот метод возвращает список изображений и текстовое представление в определенном элементе списка, и я устанавливаю это в адаптере, чтобы показать его в списке. Но как я могу отсортировать этот список по алфавиту по сравнению с текстом этого текстового представления в списке? Я пробовал это

Collections.sort(list, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return s1.compareToIgnoreCase(s2);
        }
    });

но этот метод работает только для списка типов строк, но мой список не находится в строковом типе? Что делать?

Теги:

3 ответа

2
Лучший ответ

Попробуйте сравнить таким образом

Collections.sort(list, new Comparator<Currency>() {
        @Override
        public int compare(Currency c1, Currency c2) {
            return c1.getCurrencyName().compareToIgnoreCase(c2.getCurrencyName());
        }
    })
  • 1
    Да, этот работал, спасибо большое :)
1
Collections.sort(list, new Comparator<Currency>() {
        @Override
        public int compare(Currency s1, Currency s2) {
            return s1.compareTo(s2); 
        }
});

Не забудьте реализовать интерфейс Comparable<Currency> для реализации compareTo(Currency o); как вы этого хотите.

  • 0
    Я не могу понять, можете ли вы показать мне в деталях?
  • 0
    Прочитайте о сопоставимом интерфейсе здесь: docs.oracle.com/javase/tutorial/collections/interfaces/…
0

Ваш list содержит объекты Currency, поэтому вам нужно будет создать компаратор, который сравнивает Currency. Теперь я не уверен, какой класс Currency используется, но если он является одним из стандартного JDK, то он имеет метод getCurrencyCode() который возвращает строку (или вы можете использовать countryCode который вы передаете в get()).

Затем вы просто создаете экземпляр Comparator следующим образом:

Collections.sort(list, new Comparator<Currency>() {
    @Override
    public int compare(Currency s1, Currency s2) {
        return s1.getCurrencyCode()
                 .compareToIgnoreCase(s2.getCurrencyCode());
    }
});

Обратите внимание, что предложение return не должно выполнять сравнение строк. То, что вам нужно сделать, в основном возвращает значение, которое меньше нуля, если вы считаете, что s1 "меньше", чем s2, или значение, которое больше нуля, если вы считаете, что оно "больше", чем s2 (или возвращает ноль, если они равны). Алгоритм сравнения зависит от вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню