Подсортировка без потери первого порядка сортировки? - PullRequest
0 голосов
/ 07 июня 2018

У меня есть список планов перезарядки с указанием имени и суммы, например:

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 голосов
/ 07 июня 2018

Как я понимаю, вы ожидаете алфавитную сортировку по имени и вторичную сортировку по количеству.

Однако ваш код сортирует по короткому описанию, а затем по количеству.Кажется, это не одно и то же (если имя и краткое описание не совпадают).В частности, если короткие описания ваших объектов оказываются идентичными (например, пустые строки или некоторое краткое описание по умолчанию), ваш код будет сортироваться только по количеству.

0 голосов
/ 07 июня 2018

Вы можете просто сделать

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>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...