java - 按升序对包含空值的数组进行排序

标签 java arrays sorting

我需要对包含空值的数组进行排序, 空值表示我已设置为空的无效数据,但不能简单地从数组中删除,因为它们表示无效的数据 空值必须保留在适当的位置,即对除空值之外的所有其他值进行排序 调用 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());

关于java - 按升序对包含空值的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36778614/

相关文章:

java - Gradle的CopySpec过滤器方法签名与给定的示例有何关系?

php - 使用 PHP 将多个 XML 提要解析为一个排序数组

arrays - 下面代码中函数内部的 (if block) 的作用是什么?

python - 如何使用join方法和sort方法

python - 如何迭代编写归并排序?

java - 如何在不使用任何循环结构的情况下遍历集合?

java - Spring MVC 3 AJAX

arrays - 如何正确地将某些内容追加到数组中?

javascript - JQuery 排序和过滤列表

java - 在没有 -XX 的情况下卸载标准输出日志中的类消息 :+CMSClassUnloadingEnabled