Java代码Arrays.sort(intervals,(arr1,arr2)->Integer.compare(arr1[0],arr2[0]))的含义是什么?
这段Java代码的具体含义解释
给出的代码如下:
Arrays.sort(intervals,(arr1,arr2) -> Integer.compare(arr1[0],arr2[0]));
它的作用是将二维int数组intervals按照每个子数组的第一个元素的值,从小到大升序排列,各部分拆解如下:
Arrays.sort()是Java内置的数组排序工具方法,这里调用的是支持自定义比较规则的重载版本,第一个参数传入待排序的数组,第二个参数传入自定义比较器。intervals是待排序的二维int数组,通常用来存储区间类数据,每个子数组对应一个区间的起止数值。- 第二个参数是Java 8及以上版本支持的Lambda表达式,等价于实现了
Comparator<int[]>接口的比较器,具体比较规则为:- 取两个待比较的子数组
arr1和arr2索引为0的元素,通过Integer.compare()方法对比两者大小 - 若
arr1[0]小于arr2[0]返回负数,排序时arr1会排在arr2前面 - 若两者相等返回0,排序时两者相对位置取决于所用排序算法的稳定性
- 若
arr1[0]大于arr2[0]返回正数,排序时arr1会排在arr2后面
- 取两个待比较的子数组
示例效果
如果intervals初始值为[[3,5],[1,2],[4,6],[2,4]],执行这段代码后输出的排序结果为[[1,2],[2,4],[3,5],[4,6]]。
拓展说明
如果需要改为按子数组第一个元素降序排列,只要调换Integer.compare的两个入参即可:
Arrays.sort(intervals,(arr1,arr2) -> Integer.compare(arr2[0],arr1[0]));
如果使用的Java版本低于8不支持Lambda语法,可以用匿名内部类实现相同逻辑:
Arrays.sort(intervals, new Comparator<int[]>() { @Override public int compare(int[] arr1, int[] arr2) { return Integer.compare(arr1[0], arr2[0]); } });
内容的提问来源于stack exchange,提问作者Aahlad Kethineedi
相关产品推荐
相关产品推荐

