2013-06-01 50 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想要的。 –

相关问题