Вопрос по java, sorting, android – Сортировка строки массива пользовательских классов с использованием Collections.sort

3

Я пытаюсь отсортировать свой собственный список массивов классов с помощью Collections.sort, объявив свой собственный анонимный компаратор. Но сортировка не работает, как ожидалось.

Мой код

<code>Collections.sort(arrlstContacts, new Comparator<Contacts>() {

        public int compare(Contacts lhs, Contacts rhs) {

            int result = lhs.Name.compareTo(rhs.Name);

            if(result > 0)
            {
                return 1;

            }
            else if (result < 0)
            {
                return -1;
            }
            else
            {
                return 0;
            }
        }
    });
</code>

Результат не в отсортированном порядке.

Вы знаете, что можете просто использовать & quot; return lhs.Name.compareTo (rhs.Name) & quot; ? Adam
@ Адам, спасибо, приятель ... это сработало ... kaibuki
При каких условиях это не работает? Попробуйте пройтись с отладчиком и / или написать несколько тестов модулей. elevine

Ваш Ответ

2   ответа
10

Как говорит Адам, просто сделайте:

Collections.sort(
  arrlstContacts, 
  new Comparator<Contacts>() 
  {
    public int compare(Contacts lhs, Contacts rhs) 
    {
      return lhs.Name.compareTo(rhs.Name);
    }
  }
);

МетодString.compareTo выполняет лексикографическое сравнение, которое отрицает ваш исходный код. Например строкиnumber1 а такжеnumber123 при сравнении даст -2 и 2 соответственно.

Просто возвращая 1, 0 или -1, вы получаете шанс (как это происходит у вас), что использовалась часть слияния сортировки слиянием.Collections.sort Способ не может достаточно дифференцировать строки в списке, что приводит к тому, что список не сортируется в алфавитном порядке.

7

Как указано Адамом, вы можете использоватьreturn (lhs.Name.compareTo(rhs.Name)); вот так:

Collections.sort(arrlstContacts, new Comparator<Contacts>() {
     public int compare(Contacts lhs, Contacts rhs) {
         return (lhs.Name.compareTo(rhs.Name));
     }
});
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededAdam's comment.

Похожие вопросы