使用lambda将二维数组的元素与Arrays.sort进行比较



我们有一个int[][] nums = new int[n][2](其中n是预定义的(。我们想根据数组中元素之间的差异对其进行排序,如下所示:

将基于差异的数组排序为nums[i][0] - nums[i][1]

示例:{{1,2}, {3,20}, {40,5}, {3,2}}
数组中元素之间的差异:{-1, -17, 35, 1}
基于上述差异所需的最终排序数组:{{3,20}, {1,2}, {3,2}, {40,5}}

有什么方法可以使用Array.sort(nums, (x,y) -> (lambda function))实现这种排序方法吗?

我提供了两种方法来解决它,一种是按Comparator排序,另一种是按照Lambda排序(这就是你想要的!(

import java.util.Arrays;
import java.util.Comparator;
public class lambdaFor2DArrays {
public static void main(String[] args){
int[][] matrix = {{1,2}, {3,20}, {40,5}, {3,2}};
// Sort By Comparator
/*
Arrays.sort(matrix, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return (o1[0] - o1[1]) - (o2[0] - o2[1]);
}
});
*/
// Sort By Lambda
Arrays.sort(matrix, (int[] o1, int[] o2)->{
return (o1[0] - o1[1]) - (o2[0] - o2[1]);
});
// Print Result
for (int[] arr : matrix) {
for (int a : arr) {
System.out.print(a + " ");
}
System.out.println();
}
}
}
int[][] nums = new int[][]{{1,2}, {3,20}, {40,5}, {3,2}};

Arrays.sort(nums, Comparator.comparingInt(o -> o[0]-o[1]));
Arrays.asList(nums).forEach(x -> System.out.println(x[0]+" "+x[1]));

输出:

3 20
1 2
3 2
40 5

最新更新