3

我正在尝试通过声明我自己的匿名比较器来使用 Collections.sort 对我的自定义类数组列表进行排序。但是排序没有按预期工作。

我的代码是

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

结果未按排序顺序。

4

2 回答 2

10

就像亚当说的,简单地做:

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

该方法String.compareTo执行您的原始代码否定的字典比较。例如字符串number1number123比较时会分别产生 -2 和 2。

通过简单地返回 1、0 或 -1 有一个机会(就像你正在发生的那样)合并排序使用的Collections.sort方法的合并部分无法充分区分列表中的字符串,从而导致列表未按字母顺序排序.

于 2012-04-10T15:36:20.147 回答
7

正如亚当所指出的,您可以使用return (lhs.Name.compareTo(rhs.Name));likeso:

Collections.sort(arrlstContacts, new Comparator<Contacts>() {
     public int compare(Contacts lhs, Contacts rhs) {
         return (lhs.Name.compareTo(rhs.Name));
     }
});
于 2012-04-10T15:12:13.170 回答