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

时间:2020-07-21 05:09:06

标签: java arrays sorting multidimensional-array

我们有一个u(其中u是预定义的)。我们要根据数组中元素之间的差异对此进行排序,如下所示:

根据与u的差异对数组进行排序

示例:[U]
数组中元素之间的区别:int[][] nums = new int[n][2]
根据上述差异,需要最终排序的数组:n

有什么方法可以使用nums[i][0] - nums[i][1]来实现这种排序方法?

2 个答案:

答案 0 :(得分:2)

我提供了两种解决方法,一种通过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();
        }
    }
}

答案 1 :(得分:1)

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