Java 使用Apache Commons CompareToBuilder按降序排序
我想使用ApacheCommonsCompareToBuilder按多个字段(其中一些字段按降序)对集合进行排序 即:Java 使用Apache Commons CompareToBuilder按降序排序,java,apache,sorting,apache-commons,Java,Apache,Sorting,Apache Commons,我想使用ApacheCommonsCompareToBuilder按多个字段(其中一些字段按降序)对集合进行排序 即: Collections.sort(pizzas,newcomparator(){ @凌驾 公共整数比较(Pizza p1,Pizza p2){ 返回新的CompareToBuilder().append(p1.size,p2.size).append(p1.nroftopings,p2.nroftopings).append(p1.name,p2.name).toCompari
Collections.sort(pizzas,newcomparator(){
@凌驾
公共整数比较(Pizza p1,Pizza p2){
返回新的CompareToBuilder().append(p1.size,p2.size).append(p1.nroftopings,p2.nroftopings).append(p1.name,p2.name).toComparison();
}
});
空值(即z、b、a、1、null)的默认行为仍然为真?
在这种情况下,还是先使用空值
试试这件衣服的尺寸。要对单个参数进行降序排序,只需在生成器的append方法中交换参数(
b.append(p2.name,p1.name)
而不是b.append(p2.name,p1.name)
)。需要一点额外的逻辑来将空值放在它们自然到达的相反位置(首先是在对asc进行排序时,最后是在对desc进行排序时)
final boolean nullsLast=。。。
Collections.sort(pizzas,newcomparator(){
@凌驾
公共整数比较(比萨饼p1、比萨饼p2){
CompareToBuilder b=新的CompareToBuilder()
.append(p2.size,p1.size)//p2作为排序desc的第一个参数,最后为空
.append(p1.nrOfToppings,p2.nrOfToppings);//对nrOfToppings asc排序,首先为空
//排序名称asc,根据参数先为空或后为空
if(nullsLast&&p1.name==null){
b、 追加(p2.name,p1.name);//最后为空
}
否则{
b、 追加(p1.name,p2.name);//首先为null
}
返回b.toComparison();
}
});
Collections.sort(pizzas, new Comparator<Pizza>() {
@Override
public int compare(Pizza p1, Pizza p2) {
return new CompareToBuilder().append(p1.size, p2.size).append(p1.nrOfToppings, p2.nrOfToppings).append(p1.name, p2.name).toComparison();
}
});
final boolean nullsLast = ...
Collections.sort(pizzas, new Comparator<Pizza>() {
@Override
public int compare(Pizza p1, Pizza p2) {
CompareToBuilder b = new CompareToBuilder()
.append(p2.size, p1.size) // p2 as first parameter to sort desc, nulls last
.append(p1.nrOfToppings, p2.nrOfToppings); // sort nrOfToppings asc, nulls first
// sort name asc, nulls first or last depending on parameter
if (nullsLast && p1.name == null) {
b.append(p2.name, p1.name); // null last
}
else {
b.append(p1.name, p2.name); // null first
}
return b.toComparison();
}
});