我在这里的第一个帖子问题,请保持谦逊:)
我试图用Java创建一个比较器,该比较器根据各种标准进行排序。 Main类非常基础,它具有排序所基于的几个变量。
例如,一个“ Book”类,它具有:
这是我收到的“指示”:
编写一个ComplexComperator,它可以基于多个变量进行排序。制作2个构造函数:
一个带有2个参数
public ComplexComparator(Comparator<Book> x, Comparator<Book> y)
如果两个项目都基于第一个参数相等,那么它将基于第二个参数进行排序
另一个带有4个参数
public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i)
如果逻辑变量为true,它将根据该Comparator以自然顺序对其进行排序-因此其工作原理与2参数构造函数相同。如果逻辑变量之一为假值,则会颠倒自然顺序。
就这样。我写了简单的比较器,但我不知道该如何处理。我不知道比较方法应该是什么样子。甚至我必须添加某种类变量...谢谢您的帮助!
答案 0 :(得分:3)
1。怎么做
您可以在Comparator<Book>
类中添加ComplexComparator
,而您只需要检查构造函数中条件的不同可能性即可:
public class ComplexComparator implements Comparator<Book>{
private Comparator<Book> comp;
public ComplexComparator(Comparator<Book> x, Comparator<Book> y) {
comp = x.thenComparing(y);
}
public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i) {
if (h && i) {
comp = x.thenComparing(y);
} else if (h) {
comp = x.thenComparing(y.reversed());
} else if (i) {
comp = x.reversed().thenComparing(y);
} else {
comp = x.reversed().thenComparing(y.reversed());
}
}
@Override
public int compare(Book o1, Book o2) {
return comp.compare(o1, o2);
}
}
2。如何创建
如果您使用正确的getters
,则可以用作
public static void main(String[] args) {
Comparator<Book> page = Comparator.comparing(Book::getPageNb);
Comparator<Book> title = Comparator.comparing(Book::getTitle);
ComplexComparator c1 = new ComplexComparator(page, title);
ComplexComparator c2 = new ComplexComparator(page, true, title, false);
}
3。使用方法
Full Workable Demo