2016-04-21 94 views
0

我需要對包含空值的數組進行排序 空值表示無效數據,我將其設置爲空,但無法從數組中簡單地刪除,因爲它們表示無效數據塊 空值必須保留,即排除除空值之外的所有其他值 拋出的錯誤是對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,只能找到方法,如空值先和空值最後我需要設計我自己的一個留下空值到位?如果是這樣,我怎麼會去這 –

回答

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