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

kai*_*uki 3 java sorting collections android 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;
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

结果不按排序顺序排列.

Nic*_*olt 10

就像亚当说的那样,只需:

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

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

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


Mar*_*zon 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));
     }
});
Run Code Online (Sandbox Code Playgroud)