`
stone02111
  • 浏览: 212572 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

List多字段排序

    博客分类:
  • Java
 
阅读更多
class   Student   {
    public   String   name;
    public   int   id;
    public   char   gender;
    public   Student(String   name,   int   id,   char   gender){
          this.name   =   name;
          this.id   =   id;
          this.gender   =   gender;
    }
}

然后我有一个ArrayList,   添加了三个学生进去

public   static   void   main(String[]   args){
    List   list   =   new   ArrayList();
    list.add(new   Student( "Tom ",   "3423 ",   'M '));
    list.add(new   Student( "Tom ",   "1291 ",   'M '));
    list.add(new   Student( "Marry ",   "3421 "), 'F '));

    //然后我想给list里面的学生排序,很简单,只一行代码就可以
    Collections.sort(list,   new   MyComparator());
}

/*   我的排序规则是,先按名字牌,如果名字一样的,按照id来排,只要把这个逻辑实现在MyComprator里就可以*/

class   MyComparator   implements   Comparator   {
    public   int   compare(Object   o1,   Object   o2){
          Student   s1   =   (Student)o1;
          Student   s2   =   (Student)o2;
          if   (s1.name.compateTo(s2.name)   !=   0)   //如果名字不一样
                return   s1.name.compareTo(s2.name);
          else   //   如果名字一样
                return   s1.id   -   s2.id;
    }

    //   这个method在这里没有用,所以没有具体实现
    public   boolean   equals   (Object   o){return   false;}
}

这样,Collections.sort()就会根据你自己定义的规则来排序了。它会调用compare函数来决定拿个大,拿个小。   如果返回负数,说明前者小,反之亦然。     这里,当一开始比较名字的时候,我使用了String的compareTo   ,   这样就不用自己再写String比较的算法了
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics