2010-11-30 3 views

ответ

20

Внесите свой заказ 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()); 
+2

при условии `value` некоторый класс, который реализует` Comparable` ... – harto 2010-11-30 02:36:47

0

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

+0

Или вы можете сделать это с помощью компаратора как указано выше, если вы не хотите, чтобы класс реализовал Comparable .... ваш выбор. Если вы используете Comparator, то метод сравнения будет использовать мое предложение выше. – 2010-11-30 02:33:40

1

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

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; 
    } 
}); 
3
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); 
    } 
+0

Рассмотрите возможность использования вызова библиотеки, чтобы объединить компараторы вместо того, чтобы реализовывать свой собственный здесь - см. Класс `Заказ` Гуавы: http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect /Ordering.html – 2010-11-30 04:40:29

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