我想对浮点值列表进行排序,这些值以String格式提供,例如,

"rate": "429.0",
"rate": "129.0",
"rate": "1129.0",...

如果我使用Comparator.comparing(Room::getRate),则列表将按String顺序排序,这是不正确的。因此,我在下面编写了将String转换为float并进行比较的代码。

下面的代码对我来说很好用,但是看起来很丑,还有更好的选择吗?
  stream().sorted(Comparator.comparing(Room::getRate,
(s1, s2) -> (Float.parseFloat(s1) > Float.parseFloat(s2) ? 1 :-1)))
.collect(Collectors.toList());

最佳答案

您可以将Room::getRate替换为r -> Float.parseFloat(r.getRate()),然后它将变为:

  sorted(Comparator.comparing(
         r -> Float.parseFloat(r.getRate),
         Comparator.naturalOrder())

或者
Comparator.comparingDouble(r -> Double.parseDouble(r.getRate()))

10-08 00:08