如何使用Java比较器对数组数组进行排序?

How to use Java Comparator to sort an array of arrays?

问题是根据两个元素数组的绝对差对降序排列的数组进行排序,因此{{1, 3}, {4, 12}, {5, 8}将被排序为{{4, 12}, {5, 8}, {1, 3}}

我有这样的代码:

import java.util.Arrays;
import java.util.Comparator;

public class Main {

    public static void main(String[] args) {
        Integer[][] arr = {{1, 3}, {3, 12}, {12, 16}};

        Arrays.sort(arr, Comparator.comparing(arr, (Integer[] a, Integer[] b) -> a[1] + b[1] - a[0] - b[0]);
    }
}

但我明白了 error。它说“无法推断功能接口类型”。

编辑:将以上内容更改为

import java.util.Arrays;
import java.util.Comparator;

public class Main {

    public static void main(String[] args) {
        Integer[][] arr = {{1, 3}, {3, 12}, {12, 16}};

        Arrays.sort(arr, Comparator.comparing(a -> a[0] - a[1]));

        for (int i = 0; i < arr.length; i++ ) {
            System.out.print("{" + arr[i][0] + ", " + arr[i][1] + "}, ");
        }
    }
}

我得到了想要的输出,但是我无法让 reversed() 方法像 this answer. I get this 错误那样工作,它说“预期的数组类型;找到:'java.lang.Object'”

我想我的问题大部分都得到了解答,但如果有人能用 reversed 澄清问题,我将不胜感激。

编辑:抱歉,我忽略了使用 Math.abs() 因为在我的问题的上下文中我知道数组总是像 {2,3}, {3,6}, {6 ,8}...等

降序:

Arrays.sort(arr, (o1, o2) -> Math.abs(o2[0] - o2[1]) - Math.abs(o1[0] - o1[1]));

升序:

Arrays.sort(arr, Comparator.comparingInt(o -> Math.abs(o[0] - o[1])));