如何使用Comparator.comparing()将字符串比较为双精度?

时间:2019-06-14 03:49:55

标签: java string java-8 double comparator

我有一个帐户列表,我正在尝试使用Comparator.comparing对它们进行排序。但是,由于余额不是字符串的两倍,因此排序不正确。有没有办法使用Comparator.comparing()将String值中的balance字段排序为double?

在我看来,我必须将余额类型更改为两倍以使其正常工作,但我试图不更改该值,以与所有字符串类型的其他字段保持一致。

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

答案 0 :(得分:6)

您可以使用lambda表达式来对Double字符串的balance值进行比较:

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