如何在一个class级中制作2个可比较的方法?

我有一个类,我已经通过一个属性对它进行排序。 现在我需要做另一件事,我需要创建另一种方法来对数据进行排序。 我该怎么做,所以我可以在两种方法之间做出选择。 我知道的唯一命令是Collections.sort,它将从我想要比较其数据的类中获取方法compareTo。

它甚至可能吗?

您需要做的是实现自定义Comparator 。 然后使用:

 Collections.sort(yourList, new CustomComparator()); 

具体来说,您可以编写:(这将创建一个实现Comparator的Anonymous类。)

 Collections.sort(yourList, new Comparator(){ public int compare(YourClass one, YourClass two) { // compare using whichever properties of ListType you need } }); 

如果您愿意,可以将它们构建到您的课程中:

 class YourClass { static Comparator getAttribute1Comparator() { return new Comparator() { // compare using attribute 1 }; } static Comparator getAttribute2Comparator() { return new Comparator() { // compare using attribute 2 }; } } 

它可以像这样使用:

 Collections.sort(yourList, YourClass.getAttribute2Comparator()); 

您的类中只能有一个compareTo()方法。

如果要以多种方式对同一个类进行排序,请创建Comparator实现。

如果这两种方法需要完全相同的占用空间,则可能会不恰当地重载具有多种用途的单个类,这可以通过修复类层次结构来解决 – 而不是使用“形状”,将其子类化为“椭圆”,“矩形”等

如果子类化没有意义,则需要创建不同的比较类。 在Java中,您经常使用Comparator进行比较。 创建几个(或创建一个可配置的比较器):IsbnComparator,AuthorComparator等。

哦,可配置的选项是:

  BookComparator实现Compartor {
    enum FIELD {AUTHOR,ISBN,...};
    setSortOrder(int rank,FIELD field){...}
  }