Java中Collections.sort排序不符合预期?求问题排查
问题分析与解决方案
嗨,我来帮你排查排序不符合预期的问题,主要有两个核心问题:
1. 类型转换丢失了精度
你把getMatchPercentage()返回的浮点数值转成了int,这会直接丢弃小数部分。比如20.10%和20.54%都会被转成20,导致比较时认为这两个值相等,自然没法正确排序。
2. 排序方向搞反了
Integer.compare(i1, i2)是升序排序(小的在前,大的在后),但你需要的是降序(大的在前,小的在后),所以方向完全反了。
修正后的代码
直接使用原始的浮点类型(比如Double)进行比较,同时调整比较的顺序来实现降序:
Collections.sort(announceList, new Comparator<Announce>() { @Override public int compare(Announce o1, Announce o2) { // 保留原始浮点数值,不转int Double percentage1 = o1.getMatchPercentage(); Double percentage2 = o2.getMatchPercentage(); // 用o2的数值和o1比较,实现降序排序 return Double.compare(percentage2, percentage1); } }); adapter.setAnnounceList(announceList); adapter.notifyDataSetChanged();
如果你的项目用的是Java 8及以上版本,还可以用Lambda表达式简化代码:
announceList.sort((o1, o2) -> Double.compare(o2.getMatchPercentage(), o1.getMatchPercentage())); adapter.setAnnounceList(announceList); adapter.notifyDataSetChanged();
这样修改后,就能得到你期望的排序结果:Announce4 - 76.36% → Announce3 - 27.50% → Announce2 - 20.54% → Announce1 - 20.10%
内容的提问来源于stack exchange,提问作者DavidZam
相关产品推荐
相关产品推荐

