2012-11-26 113 views
1

一般來說,我定義爲Comparator -實現比較比較的方法進行定義線

Comparator<Obj> comparator= new Comparator<Obj>() { 
    public int compare(Obj o1, Obj o2) { 
     //implementation... 
    } 
}; 

而當Comaprator是類memeber的一部分是稍微不看的代碼格式良好。有什麼方法可以將Comparator定義爲Comparator<Obj> comparator= new Comparator<Obj>()並在另一節中實現他的compare

回答

1

只要定義一個class實現Comparator接口,並實現該類中compare方法,用你的comparison logic: -

​​

,然後在那裏,無論你想用你的Comparator,使用這個類的一個實例。例如,在Arrays.sort: -

Obj[] yourArray = new Obj[10]; 
Arrays.sort(yourArray, new ObjComparator()); 
0

試試這個代碼..............

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 

class Car { 

    private String name; 
    private String brand; 
    private double cost; 

    public Car(String name, String brand, double cost) { 

     this.name = name; 
     this.brand = brand; 
     this.cost = cost; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getBrand() { 
     return brand; 
    } 

    public void setBrand(String brand) { 
     this.brand = brand; 
    } 

    public double getCost() { 
     return cost; 
    } 

    public void setCost(double cost) { 
     this.cost = cost; 
    } 

    public String toString() { 

     return getName(); 
    } 

} 

public class Hog { 

    ArrayList<Car> cars = new ArrayList<Car>(); 

    public void setIt() { 

     cars.add(new Car("Padmini", "Fiat", 100008.00)); 
     cars.add(new Car("XYlo", "Mahindra", 100000.00)); 
     cars.add(new Car("Swift", "Maruti", 200000.00)); 
    } 

    public void sortIt() { 

     Collections.sort(cars, new NameComparator()); 
     System.out.println(cars); 
     Collections.sort(cars, new BrandComparator()); 
     System.out.println(cars); 
     Collections.sort(cars, new CostComparator()); 
     System.out.println(cars); 
    } 

    class NameComparator implements Comparator<Car> { 

     public int compare(Car c1, Car c2) { 

      return c1.getName().compareTo(c2.getName()); 
     } 
    } 

    class BrandComparator implements Comparator<Car> { 

     public int compare(Car c1, Car c2) { 

      return c1.getBrand().compareTo(c2.getBrand()); 
     } 
    } 

    class CostComparator implements Comparator<Car> { 

     public int compare(Car c1, Car c2) { 

      return new Double(c1.getCost()).compareTo(new Double(c2.getCost())); 
     } 
    } 

    public static void main(String[] args) { 

     Hog h = new Hog(); 

     h.setIt(); 
     h.sortIt(); 
    } 

} 
0

您是否嘗試過使用嵌套類例如爲:

 
public class Sample { 
    public void method() { 
     ObjComparator comparator = new ObjComparator(); 
    } 
    public static class ObjComparator implements Comparator { 
     public int compare(Obj o1, Obj o2) { 
     } 
    } 
} 

這是你尋求解決辦法嗎?

1

你可以有一個實現Comparator一個單獨的類:

public class MyComapartor implements Comparator{ 

    public int compare(Obj o1, Obj o2) 
     { //implementation... 
     } 
} 

然後使用你的類中:

public class MyClass{ 

MyComapartor comp = new MyComapartor(); 

} 
1

試試這個代碼...

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 

class HDTV { 
    private int size; 
    private String brand; 

    public HDTV(int size, String brand) { 
     this.size = size; 
     this.brand = brand; 
    } 

    public int getSize() { 
     return size; 
    } 

    public void setSize(int size) { 
     this.size = size; 
    } 

    public String getBrand() { 
     return brand; 
    } 

    public void setBrand(String brand) { 
     this.brand = brand; 
    } 
} 

class SizeComparator implements Comparator<HDTV> { 
    @Override 
    public int compare(HDTV tv1, HDTV tv2) { 
     int tv1Size = tv1.getSize(); 
     int tv2Size = tv2.getSize(); 

     if (tv1Size > tv2Size) { 
      return 1; 
     } else if (tv1Size < tv2Size) { 
      return -1; 
     } else { 
      return 0; 
     } 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     HDTV tv1 = new HDTV(55, "Samsung"); 
     HDTV tv2 = new HDTV(60, "Sony"); 
     HDTV tv3 = new HDTV(42, "Panasonic"); 

     ArrayList<HDTV> al = new ArrayList<HDTV>(); 
     al.add(tv1); 
     al.add(tv2); 
     al.add(tv3); 

     Collections.sort(al, new SizeComparator()); 
     for (HDTV a : al) { 
      System.out.println(a.getBrand()); 
     } 
    } 
}