List<T>的排序
阿新 • • 發佈:2017-08-17
system lean lec add tin ava turn == bean
對List<T>的排序,我們可以用到Java提供的方法Collections.sort(List<T> list)。
比如:
List<String> sList = new ArrayList<String>(); sList.add("5"); sList.add("2"); sList.add("3"); sList.add("c"); sList.add("a"); sList.add("b"); Collections.sort(sList); System.out.println(sList);
顯示結果為:
[2, 3, 5, a, b, c]
對於Integer、String等類型,可以直接用該方法進行排序。
但是對於class我們也會有相應的規則去對其排序。
只需要class內實現comparable接口或創造一個comparator比較器。
實現Comparable接口:(需要覆蓋compareTo方法),通過Collections.sort(List<T>)即可
public class Student implements Comparable<Student> { int id; String name; @Override public int compareTo(Student t) {int i=0; i = id - t.id; if(i == 0){ i = name.compareTo(t.name); } return i; } }
創造Comparator比較器:通過Collections.sort(sList, new StudentComparator())方式排序
public class StudentComparator implements Comparator<Student> { @Override public int compare(Student s1, Student s2) {int i = 0; i = s1.getId() - s2.getId(); if(i == 0){ i = s1.getName().compareTo(s2.getName()); } return i; } }
兩種方式對比:Comparatable比較簡單,實現方法即可。Comparator沒有修改源代碼,可以實現更復雜的邏輯。
另外,通過common.collection.jar包可以通過 new BeanComparator("", "") 直接生成比較器。
@SuppressWarnings("unchecked") public static <T> void sort(List<T> list, String fieldName, boolean asc) { Comparator<?> cmp = ComparableComparator.getInstance(); cmp = ComparatorUtils.nullLowComparator(cmp); // 允許null if (!asc) { cmp = ComparatorUtils.reversedComparator(cmp); // 逆序 } Collections.sort(list, new BeanComparator(fieldName, cmp)); }
List<T>的排序