【问题标题】:How to use Comparator.comparing() to compare string as double?如何使用 Comparator.comparing() 将字符串比较为双精度?
【发布时间】:2019-06-14 03:49:55
【问题描述】:

我有一个帐户列表,我正在尝试使用 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"
       ...
    ]

}

【问题讨论】:

  • 您可以在比较期间进行内部转换为 Double,但将数据作为字符串存储在相关字段中。

标签: java string java-8 double comparator


【解决方案1】:

您可以使用 lambda 表达式来制定Double 值与balance 字符串的比较:

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

【讨论】:

  • 谢谢,效果很好。我是新手,没有意识到 compareDouble 可以很容易地用 Lambda 表达式解决这个问题。
  • @Holger 再次感谢,我从comparing 开始,然后转到comparingDouble,错过了我这样做的主要原因。
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
相关资源
最近更新 更多