У меня есть представление пользовательского списка с 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);
}
});
но этот метод работает только для списка типов строк, но мой список не находится в строковом типе? Что делать?
Попробуйте сравнить таким образом
Collections.sort(list, new Comparator<Currency>() {
@Override
public int compare(Currency c1, Currency c2) {
return c1.getCurrencyName().compareToIgnoreCase(c2.getCurrencyName());
}
})
Collections.sort(list, new Comparator<Currency>() {
@Override
public int compare(Currency s1, Currency s2) {
return s1.compareTo(s2);
}
});
Не забудьте реализовать интерфейс Comparable<Currency>
для реализации compareTo(Currency o);
как вы этого хотите.
Ваш 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
(или возвращает ноль, если они равны). Алгоритм сравнения зависит от вас.