Java 使用Apache Commons CompareToBuilder按降序排序

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

我想使用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).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();
    }
});