2014-01-27 8 views
-4

У меня есть 3 ArrayLists, например list1, list2 и list3Сортировка ArrayList в Android

list1={ram,kevin,sachin,akshay,salman}; 
list2={111111111,22222222,3333333333,4444444444,5555555555}; 
list3={[email protected],[email protected],[email protected],[email protected],[email protected]}; 

я хочу, чтобы отсортировать list1 в алфавитном порядке, и я нужен другой список для сортировки в соответствии с list1.

+0

Хорошо, сортируйте их. – Maroun

+1

Используйте POJO для этих 3 атрибутов. Кажется, имя, адрес электронной почты, id –

+5

Почему у вас нет _one_-списка, содержащего настраиваемые элементы, которые имеют эти 3 атрибута? – Thomas

ответ

0

Использовать Comparator. Там вы определяете, что сравнивать и как в методе compare() вы определяете, что должно быть возвращено из двух ваших экземпляров. Вот пример для StringComparator.

new Comparator<String>() { 
    public int compare(final String user1, final String user2) { 
    // This would return the ASCII representation of the first character of each string 
    return (int) user2.charAt(0) - (int) user1.charAt(0); 
    }; 
}; 
1

Было бы легче сделать что-то вроде так (в соответствии с вышеприведенными рекомендациями):

public class User implements Comparable<User> 
{ 
    private String name; 
    private String ID; 
    private String email; 

    public int compare(User u1) 
    { 
     return this.getName().compareTo(u1.getName()); 
    } 
} 

... 

List<User> users = ... 
Collections.sort(users); 

Приведенный выше код должен отсортировать элементы в Lexicographical Order, принимая name в качестве параметра сортировки.

+0

'реализует Comparator'. Я предполагаю, что вы имеете в виду' реализует Comparable' и, таким образом, 'public int compareTo (User other)'. – Thomas

+0

@ Томас: Да, вы правы. Изменения сделаны спасибо :) – npinti

+0

@ Keppil: Да, вы правы. Изменения сделаны спасибо :) – npinti

2

Сортировка одного списка и обновление других в соответствии с этим порядком сортировки довольно громоздка, так как вам нужно будет сопоставить новый индекс элемента со старым индексом и использовать оба для обновления других списков.

В некоторых случаях это было бы необходимо, и я бы решил, что с некоторыми промежуточными картами, но в большинстве случаев, включая ваши, я бы просто создал объект для данных и поместил их в один список, например:

class User { 
    String name; 
    int id; 
    String email; 
} 

List<User> list = ...; 

Collections.sort(list, new Comparator<User>() { 
    public int compare(User lhs, User rhs) { 
    return lhs.name.compareTo(rhs.name); 
    } 
}); 

Обратите внимание, что я умышленно убрал вещи вроде конструкторов или нулевые проверки, чтобы сварить код до необходимых частей.

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