我有一个名为 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/