使用Collections.sort对自定义类数组列表字符串进行排序

时间:2012-04-10 14:55:55

标签: java android sorting collections arraylist

我试图通过声明我自己的匿名比较器来使用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;
            }
        }
    });

结果不按排序顺序。

2 个答案:

答案 0 :(得分: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方法的合并排序的合并部分无法在列表中的字符串之间充分区分导致一个没有按字母顺序排序的列表。

答案 1 :(得分:7)

如Adam所示,您可以使用return (lhs.Name.compareTo(rhs.Name)); likeo:

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