2014-10-31 2 views
0

Мне нужно отсортировать коллекцию с помощью различных атрибутов String, которые могут быть пустыми ("") или даже null. Оба значения допустимы и должны рассматриваться одинаково.Лучший способ создания сопоставителя для доступа к строковым полям, которые могут быть пустыми или нулевыми.

Я решил эту проблему с помощью метода, который проверяет каждую строку для null и возвращает пустую строку, когда найдено null.


Пока мой компаратор выглядит поясню, как этот

public class MyComparator implements Comparator<MyObject> { 

    @Override 
    public int compare(MyObject o1, MyObject o2) { 
     // ... some logical stuff like e.g. 
     return rein(o1.getSomeValue()).compareTo(rein(o2.getSomeValue()); 
    } 

    private String rein(String str) { 
     return str == null ? "" : str;   
    } 
} 

Интересно, если эта конструкция считается нормально или если есть причина против этого? Если это не нормально, что еще я могу сделать для выполнения моих требований? Все эти (в большинстве случаев ненужные) функции вызовы выглядят уродливо для меня, поскольку мы говорим примерно о 1/1000 случаях. Поэтому мне интересно, есть ли более элегантное решение?

ответ

3

Ничего страшного здесь. Если вы опустите метод «rein», вы получите NullPointerException в случае, когда o1.getSomeValue() возвращает значение null. Поэтому эта проверка необходима для правильного метода сравнения. Трудно представить более элегантное решение.

+0

Спасибо за ваше мнение. Просто эти случаи действительно редки, поэтому я подумал, что может быть лучшее соло. Возможно, рискуя NPE и поймать его, чтобы выполнить другую логику, но злоупотреблять исключениями для процесса кажется мне некрасивым. – stg

Смежные вопросы