使用 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));
}
}
问题: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));
}
}