我通过Comparetor实现了按照对象的一个属性进行排序。但是怎么实现按照对象的两个属性或者三个属性进行排序呢?
我代码在下面:
class Test{
 public static A a1=new A("001","a","哈哈~",7);
 public static A a2=new A("001","c","哈哈~",9);
 public static A a3=new A("001","b","哈哈~",3);
 public static A a4=new A("000","d","哈哈~",6); 
 
 
 public static void main(String[] args){
  A[] voA=new A[]{a1,a2,a3,a4};
  
  java.util.Arrays.sort(voA,new Mycomparator());  A[] newA=new A[voA.length];  for(int i=0;i<voA.length;i++)
   System.out.println("["+i+"]:"+voA[i].A1+" "+voA[i].A2+" "+voA[i].A3+" "+voA[i].A4);
 }
}class A
{
 String A1;
 String A2;
 String A3;
 int    A4;
 
 public A(String oA1,String oA2,String oA3,int oA4){
  this.A1=oA1;
  this.A2=oA2;
  this.A3=oA3;
  this.A4=oA4;   
 }}class Mycomparator implements java.util.Comparator{
 public int compare(Object o1,Object o2){
  A a1=(A)o1;
  A a2=(A)o2;
  if(a1.A1.equals(a2.A1)){/*这里我想通过两个判断来实现先按照A1来排序,再按照A2来排序,可惜实现不了*/
   if(a1.A2.equals(a2.A2))
    return 1;
   else
    return 0;
  }
  else
   return -1;
 }
}哪位高手给点建议,如何实现按照两个或者三个属性来排序。 

解决方案 »

  1.   

    另外,还有个问题,Comparator接口应该有泛型,比如Comparator<T>,
    我在实现Comparator接口时,如何使用泛型,不需要再把Object类型转为A类型。
      

  2.   

    这个好像实现comparable接口更好些吧
      

  3.   

    还没用过需要对三个属性进行排序的,不过要实现的话也很简单,下面提供我的方案仅供参考:
    1、将A中的三个属性封装起来,提供一对get/set方法
    2、将设置的值放到ArrayList<A>数组里面
    3、Test类实现implements接口,对需要排序的字段按照自己的写的规则进行排序
    class Test implements Comparable<ArrayList<A>>{
        ...
        public int compareTo(ArrayList<A> o)
        {
            return 0;
        }
        ......
    }
      

  4.   


    class Test implements Comparable{
      
      public int compare(Object o1,Object o2){  {
      A a1=(A)o1;
      A a2=(A)o2;
      if(a1.A1==a2.A1&&a1.A2==a2.A2&&a1.A3==a2.A3) retrun 0;
      int i=a1.A1>a2.A1?1:(a1.A2>a2.A2?1:(a1.A3>a2.A3?1:-1))
      return i;
      }
     
    }
    你先试一下这个  至于泛型 这个如果这个算法可以   再给你写上加泛型的 
      

  5.   


    class Test implements Comparable{
      
      public int compare(Object o1,Object o2){  {
      A a1=(A)o1;
      A a2=(A)o2;
      if(a1.A1==a2.A1&&a1.A2==a2.A2&&a1.A3==a2.A3) retrun 0;
      int i=(a1.A1>a2.A1?1:(a1.A2>a2.A2?1:(a1.A3>a2.A3?1:-1)));
      return i;
      }
     
    }
      

  6.   


    class Test implements Comparable<A>{
      
      public int compare(A a1,A a2){  {
      if(a1.A1==a2.A1&&a1.A2==a2.A2&&a1.A3==a2.A3) retrun 0;
      int i=(a1.A1>a2.A1?1:(a1.A2>a2.A2?1:(a1.A3>a2.A3?1:-1)));
      return i;
      }
     
    }这个加了泛型 没测试过  楼主测试下
      

  7.   

    百度知道上面一哥们给了个好方法,可以实现。用的是字符串的compareTo方法来设置返回值。class Mycomparator implements java.util.Comparator {
     public int compare(Object o1, Object o2) {
      A a1 = (A) o1;
      A a2 = (A) o2;
      if(a1.A1.compareTo(a2.A1)!=0) {
       return a1.A1.compareTo(a2.A1);
      } else if(a1.A2.compareTo(a2.A2)!=0) {
       return a1.A2.compareTo(a2.A2);
      } else if(a1.A3.compareTo(a2.A3)!=0) {
       return a1.A3.compareTo(a2.A3);
      } else {
       return a1.A4 >a2.A4?1:a1.A4==a2.A4?0:-1;
      }
     }
      

  8.   

    Comparable接口的泛型可以用,不过我测试Comparable接口时实现的是compareTo方法,不是compare方法,compare方法是Comparetor接口的。我这边想通过Comparetor接口来实现,如果用Comparable接口就得把源程序的基础类改写,改动太大。
      

  9.   

    a1.A1>a2.A1?1:(a1.A2>a2.A2?1:(a1.A3>a2.A3?1:-1这个不行,因为A1、A2是String类型,没法用>或者<号来比较。
      

  10.   

    我刚写错了 笔误 呵呵
    不好意思啊class Test implements Comparator<A>{
      
      public int compare(A a1,A a2){  {
      if(a1.A1==a2.A1&&a1.A2==a2.A2&&a1.A3==a2.A3) retrun 0;
      int i=(a1.A1>a2.A1?1:(a1.A2>a2.A2?1:(a1.A3>a2.A3?1:-1)));
      return i;
      }
     
    }
      

  11.   

    试试这个吧class Test implements Comparator<A>{
      
      public int compare(A a1,A a2){  {
      if(a1.A1==a2.A1&&a1.A2==a2.A2&&a1.A3==a2.A3) retrun 0;
      int i=(a1.A1.compareTo(a2.A1)>1?1:(a1.A2.compareTo(a2.A2)>1?1:(a1.A3.compareTo(a2.A3)>1?1:-1)));
      return i;
      }
     
    }
      

  12.   


    呵呵 错了  写错了 class Test implements Comparator<A>{
      
      public int compare(A a1,A a2){  {
      if(a1.A1==a2.A1&&a1.A2==a2.A2&&a1.A3==a2.A3) retrun 0;
      int i=(a1.A1.compareTo(a2.A1)>0?1:(a1.A2.compareTo(a2.A2)>0?1:(a1.A3.compareTo(a2.A3)>0?1:-1)));
      return i;
      }
     
    }我做事老是马虎  呵呵
      

  13.   

    To zfq642773391(无边丝雨) 
    /////////////////////////////////////////
      if(a1.A1==a2.A1&&a1.A2==a2.A2&&a1.A3==a2.A3) retrun 0;
      int i=(a1.A1.compareTo(a2.A1)>0?1:(a1.A2.compareTo(a2.A2)>0?1:(a1.A3.compareTo(a2.A3)>0?1:-1)));
      return i;
    ////////////////////////////////////////
    这个不行,还是用下面这个吧,
     if(a1.A1.compareTo(a2.A1)!=0) {
       return a1.A1.compareTo(a2.A1);
      } else if(a1.A2.compareTo(a2.A2)!=0) {
       return a1.A2.compareTo(a2.A2);
      } else if(a1.A3.compareTo(a2.A3)!=0) {
       return a1.A3.compareTo(a2.A3);
      } else {
       return a1.A4 >a2.A4?1:a1.A4==a2.A4?0:-1;
      }