Как отсортировать несколько Arraylist - PullRequest
2 голосов
/ 06 января 2012

У меня есть вопрос, что я получаю ответ JSON от, позвонив в службу, я получаю имя, местоположение, должность, адрес электронной почты, номер телефона . Каждое поле хранится в его ArrayList. и я показываю эти значения в Listview.

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

Мы можем сделать сортировку с помощью Collection.sort (nameArrayList), но как это повлияет на другое поле? как сделать это эффективным способом ?? Есть идеи ??

Спасибо.

Ответы [ 3 ]

1 голос
/ 06 января 2012

создать hashMap<String name ,pojo values);Теперь прочитайте каждое имя и сохраните соответствующие значения местоположения, местоположения, адреса электронной почты, номера телефона в объект pojo.

map.put(name , pojo) ;

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

Когда имя повторяется

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

public class Main {

    String name = null;

    // 2011-12-11 11:30:20:0
    public static void main(String[] args) {

    ArrayList<Main> main = new ArrayList<Main>();
    main.add(new Main("CRohit"));
    main.add(new Main("DRohit"));
    main.add(new Main("ARohit"));
    main.add(new Main("12349"));
    main.add(new Main("BRohit"));
    main.add(new Main("ZRohit"));
    main.add(new Main("12345"));
    main.add(new Main("FRohit"));
    main.add(new Main("12348"));
    main.add(new Main(null));
    main.add(new Main(null));

    Collections.sort(main, new PojoComparator());
    for(Main m : main)
    {
        System.out.println(m.getName());
    }


    }

    public Main(String name)
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    class ChildProfileComparator implements Comparator<Main> {



    @Override
    public int compare(Main o1, Main o2) {

        String firstName = o1.getName();
        String secondName = o2.getName();

        if (firstName == null) {
            return +1;
        }
        if (secondName == null) {
            return -1;
        }

        if(isNumber(firstName) && isNumber(secondName))
        {
            double d1 = Double.parseDouble(firstName);
            double d2 = Double.parseDouble(secondName);

            return (d1>d2)?+1:-1;
        }

        if(isNumber(firstName))
        {
            return +1;
        }
        if(isNumber(secondName))
        {
            return -1;
        }
       return o1.getName().compareTo(o2.getName());
    }

    public boolean isNumber(String x)
    {
        if(x == null)
        {
            return false;
        }
        return x.matches("^-?\\d+(\\.\\d+)?$");
    }
}
}
1 голос
/ 06 января 2012

Оформление заказа this Blog, в котором содержится полное объяснение о сортировке содержимого ListView.

. Также вы можете получить источник из Here (примечание - не проверено)

0 голосов
/ 06 января 2012

Вместо того, чтобы хранить каждое поле в своем собственном списке массивов, почему бы не создать класс для представления каждого объекта таким образом, чтобы в этом классе были поля для имени, местоположения, положения, адреса электронной почты и номера телефона. Когда вы анализируете JSON, создайте экземпляр вышеупомянутого объекта и поместите его в ArrayList. Сделайте объект сопоставимым путем реализации сопоставимого интерфейса. Ваша функция compareTo просто разыменовывает имя объекта входного объекта и сравнивает его с текущим объектом.

Смотрите здесь для получения дополнительной информации: http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html

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