2012-05-21 3 views
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; 
    } 

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

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

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

ответ

2

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

Collections.sort(list, new Comparator<Currency>() { 
     @Override 
     public int compare(Currency c1, Currency c2) { 
      return c1.getCurrencyName().compareToIgnoreCase(c2.getCurrencyName()); 
     } 
    }) 
+1

Yess, эта работа Работа, спасибо большое :) – Reyjohn

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

Я не могу понять, можете ли вы показать мне подробности? – Reyjohn

+0

Подробнее о Сопоставимый интерфейс: http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html – nullpotent

0

list содержит Currency объектов, поэтому вам нужно будет создать компаратор, который сравнивает Currency. Теперь я не уверен, какой класс Currency использует, но если он один from the standard JDK, то он имеет метод getCurrencyCode(), который возвращает строку (или вы можете использовать , вы переходите на вызов 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 (или вернуть ноль, если они равны). Алгоритм сравнения зависит от вас.

Смежные вопросы