2011-12-15 28 views
2

集合我有這個類:命令通過不同的方式

public class Paint implements Comparable<Paint>{ 

    private String cod_paint; 
    private String title_paint; 
    private String author; 
    private int year; 

    public Paint(String cod_paint,String title_paint,String author,int year){ 

    this.cod_paint = cod_paint; 
    this.title_paint = title_paint; 
    this.author = author; 
    this.year = year; 
    } 

    /* And follow get method */ 

} 

現在我會創建一些對象油漆和它們插入到一個集合例如ArrayList

後,我要解決這收集一次通過author,另外一次是year,另一次是cod_paint。以這種方式

public int compareTo(Paint p){ 

    return cod_paint.compareTo(p.cod_paint); 
} 

時我會使用的方法sortArrayList<Paint>這將是順序:

要做到這一點,我必須實現內部粉刷方法compareTo

例如cod_paint。但是現在我怎麼能用相同的方法compareTo來實現另一種方式來定購(按作者,按年)呢?

回答

2

如果您需要不同的排序順序,可以更容易地實現多個比較器(Comparator<Paint>)並將相應的函數傳遞給sort()函數。

這也可以在線使用匿名類來完成:

Collections.sort(my_list, new Comparator<Paint>() { 
    public int compare(Paint o1, Paint o2) { ... } 
    boolean equals(Object obj) { ... } 
}); 
10

不要使用Comparable,使用自定義Comparator代替。我用的Comparator秒的枚舉去:

public enum PaintComparator implements Comparator<Paint>{ 
    BY_NAME{ 
     @Override 
     public int compareTo(Paint left, Paint right){ 
      return left.getAuthor().compareTo(right.getAuthor()); 
     } 
    }, 
    // more similar items here 
} 

現在按如下方式使用它:

List<Paint> myList = // init list here 
Collections.sort(myList, PaintComparator.BY_NAME); 

參見:

+0

(+1)不錯的技術!這兩個組件很常見,但我從來沒有見過它們以這種方式組合。 – NPE 2011-12-15 17:42:40