我想对以String格式提供的浮点值列表进行排序,例如
"rate": "429.0",
"rate": "129.0",
"rate": "1129.0",...
如果我使用Comparator.comparing(Room :: getRate),列表将按字符串顺序排序,这将是不正确的。所以我编写了下面的代码,我将String转换为float然后进行比较。
下面的代码对我来说很好,但它看起来很难看,还有更好的选择吗?
stream().sorted(Comparator.comparing(Room::getRate,
(s1, s2) -> (Float.parseFloat(s1) > Float.parseFloat(s2) ? 1 :-1)))
.collect(Collectors.toList());
答案 0 :(得分:8)
您可以将Room::getRate
替换为r -> Float.parseFloat(r.getRate())
,然后它将变为:
sorted(Comparator.comparing(
r -> Float.parseFloat(r.getRate),
Comparator.naturalOrder())
OR
Comparator.comparingDouble(r -> Double.parseDouble(r.getRate()))