Сортировать базу ArrayList по нескольким атрибутам - PullRequest
15 голосов
/ 30 ноября 2010

У меня есть ArrayList объекта.Объект содержит атрибуты date и value.Поэтому я хочу отсортировать объекты по date, а для всех объектов в одну и ту же дату я хочу отсортировать их по valueКак я могу это сделать?

Ответы [ 4 ]

22 голосов
/ 30 ноября 2010

Реализуйте пользовательский Comparator, затем используйте Collections.sort(List, Comparator).Вероятно, это будет выглядеть примерно так:

public class FooComparator implements Comparator<Foo> {
    public int compare(Foo a, Foo b) {
        int dateComparison = a.date.compareTo(b.date);
        return dateComparison == 0 ? a.value.compareTo(b.value) : dateComparison;
    }
}

Collections.sort(foos, new FooComparator());
3 голосов
/ 30 ноября 2010
public static <T> void sort(List<T> list, final List<Comparator<T>> comparatorList) {  
       if (comparatorList.isEmpty()) {//Always equals, if no Comparator.  
            throw new IllegalArgumentException("comparatorList is empty.");  
       }  
       Comparator<T> comparator = new Comparator<T>() {  
       public int compare(T o1, T o2) {  
               for (Comparator<T> c:comparatorList) {  
                   if (c.compare(o1, o2) > 0) {  
                     return 1;  
                   } else if (c.compare(o1, o2) < 0) {  
                     return -1;  
                   }  
               }  
               return 0;  
         }  
       };  
       Collections.sort(list, comparator);  
  } 
1 голос
/ 30 ноября 2010

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

Collections.sort(foos, new Comparator<Foo>{
    public int compare(Foo a, Foo b) {
        int dateComparison = a.date.compareTo(b.date);
        return dateComparison == 0 ? a.value.compareTo(b.value) : dateComparison;
    }
});
0 голосов
/ 30 ноября 2010

Если класс объекта реализует Comparable, то все, что вам нужно сделать, это правильно кодировать метод compareTo, чтобы сначала сравнить даты, а затем, если даты равны, сравнить значения, а затем вернуть соответствующий результат int на основе результатов. .

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