按升序对数组进行排序,包含空值

时间:2016-04-21 19:18:47

标签: java arrays sorting

我需要对包含空值的数组进行排序, 空值表示我已设置为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;
}

非常感谢所有帮助和/或建议。

1 个答案:

答案 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());