У меня есть объект ArrayList. Объект содержит атрибуты date
и value
. Поэтому я хочу сортировать объекты на date
, и для всех объектов той же даты я хочу их отсортировать по value
. Как я могу это сделать?Сортировка базы ArrayList по нескольким атрибутам
ответ
Внесите свой заказ 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());
Если класс объекта реализует Сопоставимым, то все, что вам нужно сделать, это правильно закодировать метод CompareTo для первого сравнения дат, а затем, если сроки равны, сравнить значение , а затем вернет соответствующий результат int на основе результатов.
Или вы можете сделать это с помощью компаратора как указано выше, если вы не хотите, чтобы класс реализовал Comparable .... ваш выбор. Если вы используете Comparator, то метод сравнения будет использовать мое предложение выше. – 2010-11-30 02:33:40
Если вы хотите, образец выглядит код, вы можете использовать следующее:
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;
}
});
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);
}
Рассмотрите возможность использования вызова библиотеки, чтобы объединить компараторы вместо того, чтобы реализовывать свой собственный здесь - см. Класс `Заказ` Гуавы: http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect /Ordering.html – 2010-11-30 04:40:29
- 1. Python Сортировка по нескольким атрибутам
- 2. Сортировка списка по нескольким атрибутам?
- 3. XSL-сортировка по нескольким атрибутам?
- 4. Сортировка объектов по нескольким атрибутам
- 5. Сортировка Struct по нескольким атрибутам
- 6. Сортировка ArrayList по нескольким свойствам
- 7. Сортировка ArrayList из Int [] по нескольким индексам
- 8. Сортировка объекта по двум атрибутам
- 9. Сортировка по атрибутам Backbone.js
- 10. Сортировка по двум атрибутам
- 11. Сортировка по нескольким атрибутам с помощью Salat для MongoDB
- 12. список фильтров по нескольким атрибутам
- 13. Ограничение результатов по нескольким атрибутам
- 14. Сортировка коллекции по нескольким полям
- 15. JS Сортировка по нескольким ограничениям
- 16. LINQ EntityFramework, сортировка по атрибутам
- 17. Сортировка ListBox объектов по атрибутам
- 18. Сортировка категории Magento по атрибутам
- 19. Сортировка JTable по нескольким критериям
- 20. Сортировка по нескольким значениям
- 21. Сортировка по нескольким полям
- 22. Сортировка по нескольким столбцам
- 23. Сортировка по нескольким полям
- 24. Сортировка по нескольким столбцам
- 25. Сортировка по нескольким индексам
- 26. Сортировка по нескольким данным
- 27. Flex e4x - выбор по нескольким атрибутам
- 28. Как обрабатывать обучение (Дерево) по нескольким атрибутам?
- 29. DynamoDB: Сканирование по нескольким атрибутам без ключа
- 30. Группировка по нескольким атрибутам и нетерпеливого загрузка
при условии `value` некоторый класс, который реализует` Comparable` ... – harto 2010-11-30 02:36:47