我有充值计划列表,其名称和金额如下
Top-Up 80
Add-On 56
Add-on 60
Top-Up 20
Recharge 45
Top-Up 121
Add-On 9
Recharge 34
我希望这样的排序输出
Add-On 9
Add-On 56
Add-On 60
Recharge 34
Recharge 45
Top-Up 20
Top-Up 80
根据金额对名称和子排序进行排序。 我试过这个但没有得到预期的结果。
Collections.sort(rechargePlans, (o1, o2) -> {
String x1 = ((RechargePlan) o1).getRechargeShortDesc();
String x2 = ((RechargePlan) o2).getRechargeShortDesc();
int sComp = x1.compareTo(x2);
if (sComp != 0) {
return sComp;
}
Integer x11 = ((RechargePlan) o1).getRechargeAmountInteger();
Integer x22 = ((RechargePlan) o2).getRechargeAmountInteger();
return x11.compareTo(x22);
});
在应用基于金额的排序时,我丢失了字母排序顺序。
答案 0 :(得分:1)
据我了解,您希望按名称按字母排序,按金额进行二次排序。
但是,您的代码按简短说明排序,然后按金额排序。它似乎不是一回事(除非名称和简短描述相同)。特别是,如果对象的简短描述恰好相同(例如空字符串或某些默认简短描述),则代码将仅按数量排序。
答案 1 :(得分:0)
你可以做到
Collections.sort(persons,
// first by short description
Comparator.comparing(RechargePlan::getRechargeShortDesc)
// then by recharge amount
.thenComparing(RechargePlan::getRechargeAmountInteger));
为了实现这一点,需要Person implements RechargePlan
关系和person instanceof List<? extends RechargePlan>
。