实现接口定义比较器
因为该接口中的compare方法前面有default修饰(接口的默认实现,jdk8的新特性)。
Comparator下有一个compare方法,通过重载该方法可指定排序规则。
int compare(Object t1, Object t2) 返回一个基本类型的整型
如果要按照升序排序
则t1 小于t2,返回-1(负数),相等返回0,t1大于t2返回1(正数)
Comparator<Integer> comparator = new Comparator<>() {
@Override
public int compare(Integer t1, Integer t2) {
return t1-t2;
}
};
如果要按照降序排序
则t1 小于t2,返回1(正数),相等返回0,t1大于t2返回-1(负数)
Comparator<Integer> comparator = new Comparator<>() {
@Override
public int compare(Integer t1, Integer t2) {
return t2-t1;
}
};
使用场景
public static void sort(T[] a, Comparator<? super T> c)根据指定比较器产生的顺序对指定对象数组进行排序。
将一个二维数组按第一个元素升序排列
int[][] intervals = new int[][]{{1,2},{5,6},{3,1}};
Arrays.sort(intervals, new Comparator<int[]>() {
public int compare(int[] t1, int[] t2) {
return t1[0] - t2[0];
}
});
//将排序后的结果封装到ArrayLIst中便于显示
ArrayList<List> list = new ArrayList<>();
for (int i = 0; i < intervals.length; i++) {
List<Integer> list1 = new ArrayList<>();
list1.add(intervals[i][0]);
list1.add(intervals[i][1]);
list.add(list1);
}
System.out.println(list);
排序的lambda表达式等价写法
Arrays.sort(intervals,(t1,t2)->t1[0]-t2[0]);
输出结果
[[1, 2], [3, 1], [5, 6]]