使用 arrays.sort 函数按降序对数组数组进行排序会导致 java 中出现错误

sorting array of arrays in descending order using arrays.sort function is resulting in errors in java

问题:https://leetcode.com/problems/maximum-units-on-a-truck/ 我应该根据内部元素的第二个值按降序对大小为 2 的数组(例如 [[1,3]、[2,2]、[3,1]])进行排序。即第一个元素 [1,3] 根据值 3. ,但我的代码导致错误:没有找到适合 sort() 的方法。一些帮助将不胜感激。

这是我在 java

中的代码
class Solution {
    public int maximumUnits(int[][] boxTypes, int truckSize) {
        Arrays.sort(boxTypes, new Comparator<int[][]>() {
                    public int compare(final int[][] entry1, final int[][] entry2) {
                        if (entry1[0][0] < entry2[0][0])
                            return 1;
                        else return -1;
                    }
                }
        );
        for (int i = 0; i < boxTypes.length; i++)
            System.out.println(boxTypes[i]);
        return 0;
    }
}

首先,您不能在<>中使用原生类型,您需要改用Integer。然后你需要比较的是内部数组 Integer[] 如果我没记错的话所以你的比较器无法工作。在这里,您只是尝试根据第一个数组的第一个元素对 2 个数组数组进行排序。

这是我会做的(使用流):

Integer[][] sortedBoxTypes = Arrays.stream(boxTypes).sorted(Comparator.comparing(entry -> entry[1])).toArray(Integer[][]::new);

如评论中所述,您正在按内部元素排序,即 int[],因此您需要 Comparator<int[]>

public class Solution {

    public static void main(String[] args) {
        int[][] input = new int[][]{new int[]{2, 2}, new int[]{1, 3}, new int[]{3, 1}};
        Arrays.sort(input, new Comparator<int[]>() {

            @Override
            public int compare(int[] o1, int[] o2) {
                return Integer.compare(o2[1], o1[1]);
            }
        });
        System.out.println(Arrays.deepToString(input));
    }
}

注意return Integer.compare(o2[1], o1[1]);,第二个参数与第一个参数进行比较以实现降序。

您也可以使用 lambda 实现相同的效果,使其更短且更易读。

public class Solution {

    public static void main(String[] args) {
        int[][] input = new int[][]{new int[]{2, 2}, new int[]{1, 3}, new int[]{3, 1}};
        System.out.println("Initial array - " + Arrays.deepToString(input));
        Arrays.sort(input, (o1, o2) -> Integer.compare(o2[1], o1[1]));
        System.out.println("Sorted array - " + Arrays.deepToString(input));
    }
}