2017-01-10 7 views
-3

Я столкнулся с проблемой сортировки строки с числами с помощью компаратора, где мои данные: {7,5 мг/5 мл, 5 мг, 5 мг/5 мл, 10 мг, 5 мг/15 мл, 5 мг/5 мл, образец, раздел}Сортировка с использованием компаратора по строке с числами и специальным символом

Я попытался код ниже

Collections.sort(List<Record> records, new Comparator<Record>(){ 
    @Override 
    public int compare(Record o1, Record o2) { 
      return o1.compareTo(o2); 
     } 
} 

Am получает следующий вывод, когда я вроде в порядке возрастания {10 мг, 5 мг , 5 мг/5 мл, 5 мг/15 мл, 5 мг/5 мл, 7,5 мг/5 мл, образец}

В приведенном выше значении знаменатель не сортируется должным образом для серии 5 мг, а также сортировка проводится как сортировка по типу, где 10 мг отображается до 5 мг, что является неправильным. Требуется выход:

{5 мг, 5 мг/5 мл, 5 мг/5 мл, 5 мг/15 мл, 7,5 мг/5 мл, 10 мг, образец, раздел}

Пожалуйста, помогите мне решить эту проблему.

+2

Нет, мы не можем - мы не делаем вашу работу за вас. Вы начинаете с написания собственного кода; а затем, когда у вас возникнут определенные проблемы, вы пишете вопрос с кодом и всеми подробностями, необходимыми для того, чтобы помочь вам. Просто посмотрите [помощь], чтобы понять, как работает это сообщество; и как/что спросить. – GhostCat

+0

Я думаю, что если вы хотите иметь выход в указанном вами порядке, вы должны использовать лексикографический порядок в компараторе. –

+0

Просьба предоставить нам код. – Dreamer

ответ

1

Если вы просто хотите, чтобы отсортировать строки, как если бы у них не было акцентов, вы можете использовать следующее:

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     o1 = Normalizer.normalize(o1, Normalizer.Form.NFD); 
     o2 = Normalizer.normalize(o2, Normalizer.Form.NFD); 
     return o1.compareTo(o2); 
    } 
}); 

Для более сложных случаев использования вы хотите прочитать на java.text.Collator. Вот пример:

Collections.sort(strs, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     Collator usCollator = Collator.getInstance(Locale.US); 
     return usCollator.compare(o1, o2); 
    } 
}); 

на заказ заказ:

окончательное Строка ORDER = "qazwsxedcvfrtgbnhyujmkiolp";

Arrays.sort (ул, новый Компаратор() {

@Override 
public int compare(String o1, String o2) { 
    return ORDER.indexOf(o1) - ORDER.indexOf(o2) ; 
} 

});

+0

Спасибо за ваш ответ Джей. Но используя нормализатор, я получаю выход, например, образец {10 мг, 5 мг, 5 мг/5 мл, 5 мг/15 мл, 5 мг/5 мл, 7,5 мг/5 мл, раздел}. Вместо этого 10 мг следует отображать после 7,5 мг/5 мл. Также значение знаменателя (i.e) после «/» не отображается по порядку. – User123

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

  • Нет связанных вопросов^_^