如何在一个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){...} }