我需要对包含空值的数组进行排序, 空值表示我已设置为null但无法简单地从数组中删除的无效数据,因为它们表示无效的数据 必须保持空值,即排除除空值以外的所有其他值 抛出的错误是对Arrays.sort()的调用时出现NullPointerException;
public static double getMedian(Double[] values) {
Double[] copy = Arrays.copyOf(values, values.length);
Arrays.sort(copy);
double median;
if (copy.length % 2 == 0)
median = (copy[copy.length / 2] + copy[copy.length / 2 - 1]) / 2;
else
median = copy[copy.length / 2];
return median;
}
非常感谢所有帮助和/或建议。
答案 0 :(得分:1)
添加一个比较器,然后返回相应的符号,表示小于,等于或大于。例如:
class MyComparator<Double> implements Comparator {
// change value to -1 to inverse sort direction.
var direction = 1;
public int compare(Double o1, Double o2) {
int sign = 0;
if (o1 == null) {
sign = -1;
} else if (o2 == null) {
sign = +1;
} else {
sign = o1.compareTo(o2);
}
return sign * direction;
}
}
Arrays.sort(copy, new MyComparator());