1 public static <T> void sort(List<T> list, Comparator<? super T> c) {
2 list.sort(c);
3 }
4
5
6 @SuppressWarnings({"rawtypes", "unchecked"})
7 private static void mergeSort(Object[] src,
8 Object[] dest,
9 int low, int high, int off,
10 Comparator c) {
11 int length = high - low;
12
13 // Insertion sort on smallest arrays
14 if (length < INSERTIONSORT_THRESHOLD) {
15 for (int i=low; i<high; i++)
16 for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--)
17 swap(dest, j, j-1);
18 return;
19 }
20
21 public class ReplyComparator implements Comparator<Reply> {
22 @Override
23 public int compare(Reply o1, Reply o2) {
24 if(isAllNumber(o1.getContent()) && isAllNumber(o2.getContent())){
25 return Integer.valueOf(o1.getContent()).compareTo(Integer.valueOf(o2.getContent()));
26 }
27 return o1.getContent().compareTo(o2.getContent());
28 }
29
30 private boolean isAllNumber(String content){
31 String regex = "^[0-9]*$";
32 Pattern pattern = Pattern.compile(regex);
33 Matcher matcher = pattern.matcher(content);
34 if(matcher.matches()){
35 return true;
36 }
37 return false;
38 }
39 }
40
41
42 Collections.sort(result,new ReplyComparator());
对result 排序,Comparator接口的compare方法参数: Reply o1, Reply o2 01代表index = x 的对象, 02是index = x+1;
这个方法返回正数,则会交换o1,o2的位置,<=0时,则不会交换。
mergeSort 是Collections.sort方法内部调用的Arrays类的方法,第16行的条件 c.compare(dest[j-1], dest[j])>0可知
只有Comparator接口的compare方法返回正数,才会交换o1,o2的位置(o1的索引小于o2的索引),如果不希望交换位置,则返回负数或0。
也就是说要想从大到小排序判定条件 if(o1>o2)【可为o对象某个属性的比较】 return -1(小于等于0);
要想从小到大排序 if(o1>o2) return 1(大于0);
String.compareTo(String anotherString)
String a = "abc";
String b = "abcde"
a.compareTo(b) 返回 a.lenth -b.lenth 也就是b大
String a = "bac";
String b = "abc";
a.compareTo(b) 返回 ‘b’ -'a' (>0 ) 也就是a大
a.compareTo(b) 返回正数 则a大, 返回负数,a小,返回0相等