【问题标题】:How to use Java Comparator to sort an array of arrays?如何使用 Java Comparator 对数组进行排序?
【发布时间】:2021-11-14 15:33:24
【问题描述】:

问题是根据两个元素数组的元素的绝对差按降序对两个元素数组的数组进行排序,所以{{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 中那样工作。我收到this 错误,其中显示“预期数组类型;找到:'java.lang.Object'”

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

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

【问题讨论】:

  • 请阅读Comparator.comparing 的Javadoc 并编辑您的问题以解释为什么您认为您传递给它的参数是正确的,或者询问它接受哪些参数的问题。

标签: java arrays sorting comparator


【解决方案1】:

降序:

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])));

【讨论】:

    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 2019-04-07
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多