Java 如何组合多个比较器?
我在这里的第一个帖子问题,请温柔一点:) 我试图用Java创建一个比较器,它根据各种标准进行排序。主类是非常基本的,它有几个排序所基于的变量 例如,“Book”类,它具有:Java 如何组合多个比较器?,java,comparator,Java,Comparator,我在这里的第一个帖子问题,请温柔一点:) 我试图用Java创建一个比较器,它根据各种标准进行排序。主类是非常基本的,它有几个排序所基于的变量 例如,“Book”类,它具有: 页码 头衔 平均每页字数 以下是给我的“指令”: 编写一个ComplexComputer,它可以基于多个变量进行排序。设2名施工人员: 一个有两个参数 public ComplexComparator(Comparator<Book> x, Comparator<Book> y) publi
- 页码
- 头衔
- 平均每页字数
public ComplexComparator(Comparator<Book> x, Comparator<Book> y)
public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i)
公共ComplexComparator(比较器x、比较器y)
如果基于第一个参数,两项相等,则基于第二个参数进行排序
另一个有4个参数
public ComplexComparator(Comparator<Book> x, Comparator<Book> y)
public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i)
public ComplexComparator(比较器x、布尔值h、比较器y、布尔值i)
如果逻辑变量为true,它将根据比较器按自然顺序对其进行排序,因此其工作原理与2参数构造函数相同。如果其中一个逻辑变量的值为假,它将颠倒自然顺序
就这样。我编写了简单的比较器,但我不知道如何处理这个。我不知道比较法应该是什么样子;或者即使我必须添加一些类变量。。。谢谢你的帮助 1。如何做 您可以在
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);
}
}
3。如何使用它
1。如何做 您可以在
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);
}
}
3。如何使用它
您可以共享
ComplexComparator
类吗?首先,我不明白。是否需要一个复杂的比较器,因为比较器可以通过比较器链接。然后比较(…)
?听起来像“如果两个数据基于第一个参数相等,那么它将基于第二个参数进行排序”。所以基本上,ComplexComparator
会包装一个Comparator
链,再加上设置排序顺序?我真的没有什么可以分享的。我真的不知道这门课应该是什么样子。“公共类ComplexComparator implements Comparator”我必须按照上面的说明编写。@LuCio这不太可能是Java-8时代之前的赋值。不管怎样:实现这样一个比较器可以让您熟悉标准API和相关类。在通用性方面,实施仍然有一定的自由度,但确切的要求没有不必要地限制…:-/您可以共享ComplexComparator
类吗?首先,我不明白。是否需要一个复杂的比较器,因为比较器可以通过比较器链接。然后比较(…)
?听起来像“如果两个数据基于第一个参数相等,那么它将基于第二个参数进行排序”。所以基本上,ComplexComparator
会包装一个Comparator
链,再加上设置排序顺序?我真的没有什么可以分享的。我真的不知道这门课应该是什么样子。“公共类ComplexComparator implements Comparator”我必须按照上面的说明编写。@LuCio这不太可能是Java-8时代之前的赋值。不管怎样:实现这样一个比较器可以让您熟悉标准API和相关类。在通用性方面,实施仍然有一定的自由度,但确切的要求没有不必要地限制…:-/非常感谢!我可能想得有点过头了,看起来很合乎逻辑。再次感谢你!非常感谢!我可能想得有点过头了,看起来很合乎逻辑。再次感谢你!