我尝试在第一个值上对2D双数组(double [] [])进行排序。 示例:{1.0226342823592962,0.0},{1.0395582845873155,1.0} 从最大的价值开始。 这是我使用的代码(java生成的一半)
java.util.Arrays.sort(indexMatrix, new java.util.Comparator<double[]>() {
@Override
public int compare(double[] o1, double[] o2) {
// TODO Auto-generated method stub
return 0;
}
});
然而我的'indexMatrix'在之后没有改变。我认为它与public int compare有关,因为它们彼此如此接近,如果你将它们转换为int,它们将全部为1并且不能被排序。还是别的什么?
答案 0 :(得分:1)
你必须实现比较方法,你只有一个模板。它保持不变,因为默认情况下返回0表示比较值相等。根据实际情况,其他返回值为-1和+1。
答案 1 :(得分:1)
为什么要将它们转换为整数?只需在排序方法中使用Double.compareTo(Double)
方法:
public static void main(String[] args) {
double[][] indexMatrix = new double[][] {
new double[] { 1.02, 100 },
new double[] { 1.03, 123 },
new double[] { 1.01, 321 } };
Arrays.sort(indexMatrix, new Comparator<double[]>() {
@Override
public int compare(double[] o1, double[] o2) {
return Double.compare(o2[0], o1[0]);
}
});
for (double[] d : indexMatrix)
System.out.println(Arrays.toString(d));
}
输出:
[1.03, 123.0]
[1.02, 100.0]
[1.01, 321.0]
答案 2 :(得分:1)
不,你不会将你的双打投射到整数。 int
正是compare()
期望作为返回参数的内容。如果o1
和o2
相等,它应返回0,如果o1 < o2
则小于0,如果o1 > o2
则大于0。
您只需使用Double.compare()
:
java.util.Arrays.sort(indexMatrix, new java.util.Comparator<double[]>() {
@Override
public int compare(double[] o1, double[] o2) {
// note that o2 comes first here to sort in descending order
return Double.compare(o2[0], o1[0]);
}
});
答案 3 :(得分:0)
使用Java8 +
Arrays.sort(indexMatrix, (Double[] o1, Double[] o2) -> Double.compare(o1[0], o2[0]));