Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
Arrays.sort(intervals, (v1, v2) -> v1[0] - v2[0]);
假设传来两个值,v1 与 v2,那么他们的先后顺序以 v1[0] 比 v2[0] 的结果为准 若v1[0]-v2[0]<0 即v1[0]<v2[0] 则以升序排列若 = 则 =,若 > 则 >升序排列
举一反三:Arrays.sort(intervals, (v1, v2) -> v1[0] == v2[0] ? v2[1] - v1[1] : v1[0] - v2[0]); 表示:传来两个值 v1 与 v2,若 [0] 相同,则按 [1] 降序;若不同则按 [0] 升序
补充:如何判定重写Comparator是升序还是降序
//升序
Arrays.sort(points,new Comparator<int[]>(){
public int compare(int[] a,int[] b){
return a[1] < b[1] ? -1:1;
}
});
对Comparetor.compare(o1, o2)方法的返回值,如果返回的值小于零,则不交换两个o1和o2的位置;如果返回的值大于零,则交换o1和o2的位置。 注意,不论在compare(o1, o2)中是如何实现的(第一种实现方式是 o1-02, 第二种实现方式是 o2 - o1),都遵循上述原则,即返回值小于零,则交换o1和o2的位置;返回值大于零,则不交换o1和o2的位置。 所以,如果采用第一种实现方式,即 o1 - o2, 那么将是升序排序。因为在原始排序中o1在o2的前边,如果o1小于o2,那么o1 - o2小于零,即返回值是小于零,但是小于零是不会交换o1和o2的位置的,所以o1依然排在o2的前边,是升序;如果o1大于o2,那么o1 - o2大于零,即返回值是大于零,大于零是要交换o1和o2的位置的,所以要改变原始排序中o1和o2的位置,那么依然是升序
即一句话,返回负数,第一个参数放前面;comparator反应两个参数的权重。1是前者权重大,-1是后者。最后按照权重由小到大排序。 o1=4, o2=6, 返回1表示4权重大,权重默认升序最后4排后面即数值降序。