gpt4 book ai didi

java - 使用 Apache Commons CompareToBuilder 降序排序

转载 作者:行者123 更新时间:2023-12-02 12:08:45 26 4
gpt4 key购买 nike

我想使用 Apache Commons CompareToBuilder 按多个字段(其中一些按降序排列)对集合进行排序

即:

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();
}
});

空值(即 z、b、a、1、null)的默认行为仍然正确吗?或者在这种情况下空值首先出现?

How to compare objects by multiple fields

最佳答案

试穿一下尺寸。要对单个参数进行降序排序,您所要做的就是交换构建器的追加方法中的参数(b.append(p2.name, p1.name) 而不是 b.append( p2.名称,p1.名称))。需要一点额外的逻辑来将空值放置在它们自然放置的相反位置(在对 asc 排序时首先,在对 desc 排序时最后)。

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();
}
});

关于java - 使用 Apache Commons CompareToBuilder 降序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46708058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com