Как использовать Comparator.comparing () для сравнения строк как двойных? - PullRequest
5 голосов
/ 14 июня 2019

У меня есть список учетных записей, и я пытаюсь использовать Comparator.comparing для их сортировки.Однако, поскольку баланс - это строка, а не двойная, она сортируется неправильно.Есть ли способ отсортировать поле баланса в строковом значении как двойное с помощью Comparator.comparing ()?

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

List<Account> accountList = getAccountList(id);

Comparator<Account> accountComparator = 
 Comparator.comparing(Account::getBalance);

if (sortDirect.equalsIgnoreCase("desc")) {
    accountList.sort(accountComparator.reversed());
} else {
    accountList.sort(accountComparator);
}

Balance DESC order sorted incorrectly.

"accountList": {      
    "accounts": [
        {
            "accountNumber": "A",
            "balance": "39261.2",
            "payment": "111.42"
        },
        {
            "accountNumber": "B",
            "balance": "251194.28",
            "payment": "128.79"
       ...
    ]

}

1 Ответ

6 голосов
/ 14 июня 2019

Вы можете использовать лямбда-выражение для формулирования сравнения Double значения строки balance:

Comparator<Account> accountComparator = Comparator.comparingDouble(
        acc -> Double.parseDouble(acc.getBalance()));
...