【问题标题】:How to sort class objects according to user define sorting using arrylist?如何使用arraylist根据用户定义的排序对类对象进行排序?
【发布时间】:2016-04-11 08:12:00
【问题描述】:

我正在使用 arreyList 中的 Comparator 对类对象进行排序,我是 根据名称的字母顺序获取排序的对象
如果低于则比较器的来源

public static Comparator<SortingObjects StuNameComparator = new Comparator<SortingObjects() {

    public int compare(SortingObjects s1, SortingObjects s2) {                 
       String StudentName1 = s1.getName().toUpperCase();                       
       String StudentName2 = s2.getName().toUpperCase();                       
       int c;                                                                  

       c = StudentName1.compareTo(StudentName2);                               



       if(c==0){                                                               
           int rollno1 = s1.getPrice();                                    
           int rollno2 = s2.getPrice();                                    
            c = rollno1-rollno2;                                           
       }                                                                       


       return c;                                                               

    }};  

它给出的结果如下:

 Student Name Sorting:   


     [ name=AP, price =0]
     [ name=AP, price =0]
     [ name=AP, price =0]
     [ name=AP, price =0]
     [ name=CH, price =0]
     [ name=CH, price =0]
     [ name=CH, price =0]
     [ name=CH, price =0]
     [ name=KE, price =0]
     [ name=KE, price =0]
     [ name=TN, price =0]

但我想要这样的输出:

[ name=CH, price =3]    
   [ name=CH, price =10]
   [ name=AP, price =2] 
   [ name=AP, price =2] 
   [ name=AP, price =7] 
   [ name=AP, price =10]
   [ name=TN, price =15]
   [ name=KE, price =2] 
   [ name=KE, price =5] 

这意味着:“CH”首先出现,然后是“AP”,然后是“TN”,最后是
“KE”有什么方法可以实现比较方法,这样我就可以得到 结果由自己定义的排序

【问题讨论】:

  • 您的问题似乎出在SortingObject 类中,而不是比较本身,因为输出仅显示price=0。您可能想为我们添加这个类以便找到问题。
  • 只有名称或价格,无法按你的意愿排序,毕竟它不遵循任何顺序。
  • 您正在寻找什么类型的订单?您的询问没有定义任何顺序。
  • 不要使用减法来比较整数(例如c = rollno1-rollno2;) - 使用Integer.compare。减法可能会溢出。
  • 你重写了sortingObjects类中的equals和hashcode方法了吗?

标签: java sorting arraylist collections


【解决方案1】:

您可以将您的排序存储到数组中并将其用于比较器:

public static Comparator<SortingObjects StuNameComparator = new Comparator<SortingObjects() {
    List ordering = Arrays.asList("CH","AP","TN","KE");
    public int compare(SortingObjects s1, SortingObjects s2) {                 

       return ordering.indexOf(s1.name) - ordering.indexOf(s2.name);                                                               

    }};  

这只是一个sn-p,应该是这样的。

【讨论】:

  • 感谢您的帮助 :-)
猜你喜欢
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多