java - 使用 Java Comparator 对二维数组进行排序

标签 java arrays sorting

我有一个名为 interval[g][2] 的二维数组,其中 g 是某个数字。 目前,我正在尝试首先通过第一个元素的递增顺序对数组进行排序,如果它们相等,则通过第二个元素的递减顺序进行排序。

我尝试过两种方式:

1) 使用 Java 8 的 Comparator.comparing 方法:

Arrays.sort(interval, Comparator.comparing((int[] arr) -> arr[0]));

2) 使用 Arrays.sort:

Arrays.sort(interval, new Comparator<int[]>() {
    @Override
    public int compare(int[] s1, int[] s2) {
        if (s1[0] > s2[0])
            return 1;
        else if (s1[0] < s2[0])
            return -1;
        else {
            if(s1[1] < s2[1])
                return 1;
            else if (s1[1] > s2[1])
                return -1;
            else
                return 0;
        }
    }
});

第一个方法返回一个部分排序的列表。

[[0, 10], [10, 30], [30, 50]]
[[0, 10], [3, 19], [35, 45]]
[[10, 30], [27, 33], [30, 50]]
[[-10, 10], [0, 20], [35, 45]]
[[10, 30], [20, 40], [30, 50]]
[[0, 20], [8, 28], [37, 43]]
[[0, 20], [15, 35], [37, 43]]
[[0, 0], [8, 28], [10, 40]]

如您所见,它正在对一组三元组中的内容进行排序。

第二种方法根本不对数组进行排序。我不能使用原始数据类型进行排序吗?任何人都可以建议吗?

最佳答案

我想你正在寻找这个:

Arrays.sort(interval, Comparator.comparingInt((int[] arr) -> arr[0]).thenComparing(Comparator.comparingInt((int[] arr) -> arr[1]).reversed()));

或者如果你想使用自定义的Comparator:

 Arrays.sort(interval, new Comparator<int[]>() {
     @Override
     public int compare(int[] o1, int[] o2) {
         int result = Integer.compare(o1[0], o2[0]);
         if (result == 0) {
             result = Integer.compare(o2[1], o1[1]);
         }
         return result;
     }
 });

关于java - 使用 Java Comparator 对二维数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37150402/

相关文章:

c - 为什么数组自赋值(C 程序)?

java - 如何在 JSF 标记中操作字符串?

java - Kotlin 无法获取所需的类型干扰 Array<Uri>!找到数组<Uri?>

java - 噪音()没有给我一个广泛的值

php - 警报 Javascript 数组对象显示为空

bash - 按同一行上不同值之间的最大差异排序

java - getLeft() 返回错误值

javascript - 如何在 JavaScript 中有效地比较一个对象数组与另一个数组?

algorithm - 这个问题和/或解决算法的正确名称是什么?

mysql - sql查询年/月排序