是否可以从Java中的方法调用比较器?我有以下代码片段,我应该编写一个具有addComparator方法的类,我假设它必须以某种方式添加Comparator。代码是(它不是完整版,我只是想了解我应该做什么以及如何实现它):
ComparatorChain chain = new ComparatorChain();
chain.addComparator(new sortByTitle());
chain.addComparator(new sortByDirector());
Collections.sort(library.getItem(),chain);
有人可以告诉我如何实现这一点。 感谢。
答案 0 :(得分:0)
假设你有:
class ComparatorChain implements Comparator<TypeToBeSorted> {....};
class SortByTitle implements Comparator<TypeToBeSorted> {....};
class SortByDirector implements Comparator<TypeToBeSorted> {....};
类ComparatorChain
有两个对象,如:
private SortByTitle sortByTitle;
private SortByDirector sortByDirector;
类ComparatorChain
可以实现:
public int compare(TypeToBeSorted o1, TypeToBeSorted o2) {
int comByTitle = (sortByTitle == null ) ? 0 : sortByTitle.compare(o1, o2);
int comByDirector = (sortByDirector == null ) ? 0 : sortByDirector.compare(o1, o2);
//add logic
return ......;
}
chain.addComparator(new sortByTitle());
应初始化sortByTitle
void addComparator(SortByTitle sortByTitle) { this.sortByTitle = sortByTitle; }
chain.addComparator(new sortByDirector());
应初始化sortByDirector。
您可以使用instanceof
编辑:上述答案不应被视为正确的实施,而是更多的尝试回答
有人可以给我一个提示吗
用一些简单的东西开始。
您可以在ComparatorChain
中使用更加动态的通用且灵活的实现:
List<Comparator<TypeToBeSorted>> comperatorList = new ArrayList<>(); //or better use generics
按
按所需顺序添加比较器void addComparator(Comparator<TypeToBeSorted> comperator) { comperatorList.add(comperator); }
使用comperatorList元素实现实现compare
。