2013-06-01 78 views
2

我使用幾個分隔符將對象的ArrayList按降序或升序排序。 Currenlty,這些比較器是在不同的類別。我如何將以下比較器合併到一個類中?將分隔符合併爲一個類

class ascendingSortComparator implements Comparator<Movie> { //sort movie ascending 

    @Override 
    public int compare(Movie movie1, Movie movie2) { 
     return movie1.getTitle().compareTo(movie2.getTitle()); 
    } 
} 

class descendingSortComparator implements Comparator<Movie> { //sort movie ascending 

    @Override 
    public int compare(Movie movie1, Movie movie2) { 
     return -movie1.getTitle().compareTo(movie2.getTitle()); 
    } 
} 

如果這是可能的,我將如何調用適當的比較器。目前我稱之爲:

public void sortData() { 
    String option = (String) sortComboBox.getSelectedItem(); 

    if ("Ascending".equals(option)) { 
     Collections.sort(movieCatalog, new ascendingSortComparator()); 
     //indexCount = (movieCatalog.size()-1) - indexCount; 
     //displayData(indexCount); 
    } 

    if ("Descending".equals(option)) { 
     Collections.sort(movieCatalog, new descendingSortComparator()); 
     //indexCount = (movieCatalog.size()-1) - indexCount; 
     //displayData(indexCount); 
    } 
} 

回答

0

你可以把電影中TreeSet(或TreeMap),而不是List和它們在插入時間排序(你給Comparator作爲構造函數的參數)。要獲得相反的電影,只需致電Collections.reverse()

0

您可以使用方法Comparator<T> Collections.reverseOrder(Comparator<T>)

另外我建議不要每次都創建新的Comparator,而是分配一次然後存儲它們。

如果您需要更復雜的比較儀,番石榴的訂購會很有用:Ordering explained

3

我會用一個枚舉

public enum MovieComparator implement Comparator<Movie> { 
    ASCENDING { //sort movie ascending 
     public int compare(Movie movie1, Movie movie2) { 
      return movie1.getTitle().compareTo(movie2.getTitle()); 
     } 
    }, DECENDING { 
     public int compare(Movie movie1, Movie movie2) { 
      return movie2.getTitle().compareTo(movie1.getTitle()); 
     } 
    } 
} 

public void sortData() { 
    String option = (String) sortComboBox.getSelectedItem(); 
    MovieComparator cmp = MovieComparator.valueOf(option.toUpperCase()); 
    Collections.sort(movieCatalog, cmp); 
} 
+1

嚴格地說:有三類:'MovieComparator'和兩個匿名類。但我認爲這是儘可能的接近。 –

+0

它們都可以出現在一個Java文件中,而實現意味着多個.class文件,正如你所說的,我認爲這是最接近OP想要的。 –

相關問題