You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:11:28