在不丢失第一个排序的情况下进行分类?

时间:2018-06-07 06:59:17

标签: java android sorting arraylist collections

我有充值计划列表,其名称和金额如下

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

在应用基于金额的排序时,我丢失了字母排序顺序。

2 个答案:

答案 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>