commons-beanutils 類庫中有一個 BeanComparator 類,可以用來給 JavaBean 排序。但是這個類一次只能對一個屬性排序。下面是一個利用 BeanComparator 實現對 JavaBean 的多個屬性進行排序的例子,非常簡單:
1.import org.apache.commons.beanutils.BeanComparator;
2.import java.util.Collections;
3.import java.util.Comparator;
4.import java.util.List;
5.
6./**
7. * 對 List 元素的多個屬性進行排序的類
8. */
9.@SuppressWarnings({"unchecked"})
10.public class ListSorter {
11.
12. /**
13. * List 元素的多個屬性進行排序。例如 ListSorter.sort(list,
"name", "age"),則先按
14. * name 屬性排序,name 相同的元素按 age 屬性排序。
15. *
16. * @param list 包含要排序元素的 List
17. * @param properties 要排序的屬性。前面的值優先級高。
18. */
19. public static <V> void sort(List<V> list, final
String... properties) {
20. Collections.sort(list, new Comparator<V>() {
21. public int compare(V o1, V o2) {
22. if (o1 == null && o2 == null) return 0;
23. if (o1 == null) return -1;
24. if (o2 == null) return 1;
25.
26. for (String property : properties) {
27. Comparator c = new BeanComparator(property);
28. int result = c.compare(o1, o2);
29. if (result != 0) {
30. return result;
31. }
32. }
33. return 0;
34. }
35. });
36. }
37.}