背景
有一个列表需要按照【金额: money】【降序】排列,但这个金额是 String 类型的。
解决方案
首先想到的是自定义排序
Collections.sort(list, new Comparator<Entity>(){
@Override
public int compare(Entity o1, Entity o2){
if(o1.getMoney().compareTo(o2.getMoney()) == 0){
return 1;
}
return o2.getMoney().compareTo(o1.getMoney());
}
});
但是这种方式没生效,因为字符串和数值类型排序规则不一样。
于是通过这种方式解决:
List<Entity> finalList = list.stream()
.sorted(Comparator.comparing(o1 -> new BigDecimal(JSONObject.parseObject(JSON.toJSONString(o1)).getString("money"))).reversed())
.collect(Collectors.toList());