Сортировка компаратора сначала совпадает со строкой, а остальные - в порядке сортировки по умолчанию - PullRequest
1 голос
/ 09 апреля 2020
String currency = EUR;

List<Payment> payments = #has payments, with one field being Currency;

//This is not it:
payments.sort(Comparator.comparing(o -> o.getCurrency().equals(currency));

Я хочу, чтобы все платежи, чья валюта равна переменной валюта , в моем случае EUR должны быть наверху списка, остальные останутся без изменений.

И если нет ничего равного переменной currency , затем сортируйте по значению по умолчанию, которое, например, равно USD.

Я знаю, что это можно сделать другими способами, но это своего рода вызов, может кому-то помогите, чего мне не хватает в первой части, чтобы заказать по порядку.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Для сортировки объекта сначала по currency = EUR необходимо иметь пользовательские логи компаратора c, а остальные - в порядке естественной сортировки

List<Payment> list = new ArrayList<>(List.of(new Payment("EUR"),new Payment("EUR"),new Payment("AUS"),new Payment("INR"),new Payment("INR")));



    list.sort((c1,c2)->{

        if (c1.getCurrency().equals("EUR")) {
            return c2.getCurrency().equals("EUR") ? 0 : -1;
        }
        if (c2.getCurrency().equals("EUR")) {
            return 1;
        }
        return c1.getCurrency().compareTo(c2.getCurrency());

    });

    System.out.println(list);  //[Payment [currency=EUR], Payment [currency=EUR], Payment [currency=AUS], Payment [currency=INR], Payment [currency=INR]]
0 голосов
/ 09 апреля 2020

Если вы просто хотите, чтобы функция сортировки работала для вас, тогда ваш компаратор может вернуть отрицательное значение для вашей валюты EUR, предоставив ей самую низкую позицию в вашем порядке сортировки, и рассматривать все остальные как равные. Если вы хотите поддерживать порядок в своих валютных объектах в евро, вам придется подробнее остановиться на этом.

list.sort((o1, o2) -> o1.currency.equals("EUR") ? -1 : 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...