繁体   English   中英

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

[英]Sorting custom class array-list string using Collections.sort

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

我的代码是

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

结果未按排序顺序排列。

正如 Adam 所说,只需执行以下操作:

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方法有可能(正如您正在发生的那样)无法充分区分列表中的字符串,从而导致列表不是' t 按字母顺序排序。

正如 Adam 所指出的,您可以使用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));
     }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM