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
相关产品推荐
相关产品推荐

