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

问题描述:

我需要对包含空值的数组进行排序 空值表示无效数据,我将其设置为空,但无法从数组中简单地删除,因为它们表示无效数据块 空值必须保留,即排除除空值之外的所有其他值 抛出的错误是对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; 
} 

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

+2

实现自己的'比较'并将其提供给'Arrays.sort()' –

+0

有你看着实现自己的比较,并把该本的排序方法? –

+0

嗨@AndreM我看了比较器的API,只能找到方法,如空值先和空值最后我需要设计我自己的一个留下空值到位?如果是这样,我怎么会去这 –

添加一个比较器,然后返回相应的符号,以指示小于,等于或大于。例如:

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