2016-04-21 4 views
0

Мне нужно отсортировать массив, содержащий нулевые значения, Нулевые значения представляют собой недопустимые данные, которые я установил в значение null, но не могут быть просто удалены из массива, поскольку они представляют недопустимый кусок данных Нулевые значения должны быть сохранены на месте, т. е. сортировать все остальные значения, кроме нулевых значений. Ошибка, возникшая при вызове массива Arrayys.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 Я посмотрел на Comparator api и могу только найти методы, такие как nulls first и nulls last, мне нужно было бы создать собственный, чтобы оставить нулевые значения на месте? Если да, то как я могу это сделать –

ответ

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()); 
Смежные вопросы