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

Java中存储Person对象的ArrayList按age字段排序失效问题排查

Java ArrayList按Person类age字段排序失效问题排查

核心原因

你自定义的Comparator的compare方法返回值不符合Java SDK的规范,是排序逻辑不生效的直接原因。

规范要求

Java的Comparator.compare(T o1, T o2)方法强制要求返回值遵循以下规则:

  • 若o1应排在o2前面(o1 < o2),返回负整数
  • 若o1和o2顺序相等,返回0
  • 若o1应排在o2后面(o1 > o2),返回正整数

你的代码错误点

你的实现里所有分支返回的都是年龄值,而年龄肯定为正整数,永远不会返回负数或0,排序逻辑完全不符合预期,Collections.sort无法正确调整列表顺序。

修正后的代码

传统匿名内部类写法

Comparator<Person> comparator = new Comparator<Person>() {
    @Override
    public int compare(Person first, Person second) {
        // first.age - second.age 为升序排序,颠倒顺序即为降序
        return first.age - second.age;
    }
};
Collections.sort(myList, comparator);

Java 8+ 简化写法

// 升序排序,若Person类有getAge()方法可替换为Person::getAge更规范
myList.sort(Comparator.comparingInt(p -> p.age));

内容的提问来源于stack exchange,提问作者john dillenger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:27:04