Java中比较大小的方式
# Java中比较大小的方式
# 一、常用的几种比较大小方式
# 1.1、lambda表达式 (a,b) -> a - b
//一维数组,注意此处使用int[] 会编译报错
Integer[] array = {4, 3, 2, 10, 1, 5, 6};
Arrays.sort(array, (a, b) -> b - a);
//二维数组
int[][] intervals = {{1,5},{5,3},{3,34},{2,4}};
Arrays.sort(intervals,(a,b) -> a[0] - b[0]);//根据二维数组的第一列 升序
Arrays.sort(intervals,(a,b) -> b[0] - a[0]);//根据二维数组的第一列 降序
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
在某些情况下,
a[0] - b[0]
将溢出,您将得到一个符号错误的结果。例如,如果
a
是Integer.MIN_VALUE
并且b
是正整数,那么a - b
应该是负的,但结果是正的。(这是一个相当常见的错误,即使是相对有经验的程序员也会犯…….)
如果考虑这种情况的话,使用这个
(x < y) ? -1 : ((x == y) ? 0 : 1)
等价于Integer.compare(a,b)
# 1.2、Comparator
int[][] intervals = {{1,5},{5,3},{3,34},{2,4}};
//intervals 升序,底层调用的是`Integer.compare(a,b)`
Arrays.sort(intervals, Comparator.comparingInt(a -> a[0]);//根据二维数组的第一列数据进行比较
Arrays.sort(intervals, new Comparator<int[]>() {//根据二维数组的第二列数据进行比较
public int compare(int[] point1, int[] point2) {//升序
if (point1[1] < point2[1]) {
return -1;//-1 表示points[1]小于points2[1]
}else if(point1[1] == point2[1])(
return 0;//0 表示points[1]等于points2[1]){
}else {
return 1;//1 表示points[1]大于points2[1]
}
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15