按升序对数组进行升序包含空值
问题描述:
我需要对包含空值的数组进行排序 空值表示无效数据,我将其设置为空,但无法从数组中简单地删除,因为它们表示无效数据块 空值必须保留,即排除除空值之外的所有其他值 抛出的错误是对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;
}
所有帮助和/或建议非常感谢。
答
添加一个比较器,然后返回相应的符号,以指示小于,等于或大于。例如:
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());
实现自己的'比较'并将其提供给'Arrays.sort()' –
有你看着实现自己的比较,并把该本的排序方法? –
嗨@AndreM我看了比较器的API,只能找到方法,如空值先和空值最后我需要设计我自己的一个留下空值到位?如果是这样,我怎么会去这 –