在编码过程中,遇到对数据库某一字段排序时,使用stream的sort方法一直返回的错误结果,在尝试多次无效,最终发现是mysql处理数据库时,对字符型数值数据排序错误
在使用mysql对字符型定义使用如下语句
SELECT DISTINCT ldh FROM `table_name` ORDER BY ldh ASC;
查询时出现排序错误的情况
如果需要返回正确的结果,可以通过在排序字段*1或排序字段+0解决;
SELECT DISTINCT ldh FROM `table_name` ORDER BY ldh*1 ASC;
SELECT DISTINCT ldh FROM `table_name` ORDER BY ldh+0 ASC;
当然,在使用stream排序是也需要做一次强制类型转换,才能得到正确的结果,字符型数值数据排序,真的挺大坑。。
list = list.stream().sorted(Comparator.comparing((Map<String, Object> h) -> Integer.valueOf((String) h.get("lch"))))
.collect(Collectors.toList());