2012-06-07 50 views
0

排序,然後通過propertyY然後通過propertyZ給定下面的類:落實propertyX在Java中

class Boo { 
    private final String propertyX; 
    private final Double propertyY; 
    private final Integer propertyZ; 
} 

一個如何去構建一個Comparator這將導致該類的實例由propertyX被責令然後通過然後由propertyZ在Collection.sort(...)上調用Collection<Boo>

是一個Comparator的路要走嗎?

+1

可能的重複[最佳方法來比較對象由多個字段?](http://stackoverflow.com/questions/369512/best-way-to-compare-objects-by-multiple -fields) – NPE

+0

我不知道爲什麼@sudocode刪除了他的答案。它指出[這個優秀的帖子](http://stackoverflow.com/questions/1421322/how-do-i-sort-a-list-with-multiple-sort-parameters/1421458#1421458)它回答你的問題。 – missingfaktor

+0

回答@Yishai在這篇文章中演示了優化使用枚舉自定義排序和分組排序(多個參數)利用比較鏈接。 – gunalmel

回答

4

你從字面上做你的建議。

Comparator<Boo> booCmp = new Comparator<Boo>() { 
    @Override 
    public int compare(Boo o1, Boo o2) { 
     int cmp = o1.propertyX.compareTo(o2.propertyX); 
     if (cmp == 0) 
      cmp = o1.propertyY.compareTo(o2.propertyY); 
     if (cmp == 0) 
      cmp = o1.propertyZ.compareTo(o2.propertyZ); 
     return cmp; 
    } 
}; 
+0

此解決方案是否違反Comparator.compare方法的規則? http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Comparator.html – auser

+0

我能想到的唯一的事情是,如果你沒有類似地實現'equals'。你有什麼想法? –

0

@sudocode給出了一個很好的答案,但我認爲它對你來說甚至是太多了。只需實現您的自定義比較器,比較propertyX,然後propertyY。使用這個比較器Collections.sort()Arrays.sort()