java中arraylist按规则排序需用collections.sort()或list.sort()配合comparator,支持lambda(如升序list.sort((a,b)->integer.compare(a.getage(),b.getage())))、方法引用、多级排序及自定义comparator实现类,注意空值处理与就地排序特性。

Java 中 ArrayList 按指定规则排序,核心是使用 Collections.sort() 或 list.sort() 配合自定义比较逻辑,支持 Lambda、方法引用或实现 Comparator 接口。
用 Lambda 表达式快速排序(推荐)
适用于简单、一次性的排序规则,代码简洁直观:
- 升序:
list.sort((a, b) -> Integer.compare(a.getAge(), b.getAge())); - 降序:
list.sort((a, b) -> Integer.compare(b.getAge(), a.getAge()));或更简洁地list.sort(Comparator.comparing(Person::getAge).reversed()); - 多级排序(先按年龄升序,年龄相同时按姓名字典序):
list.sort(Comparator.comparing(Person::getAge).thenComparing(Person::getName));
复用 Comparator 实现类(适合复杂或共用逻辑)
当排序规则较复杂、需多次使用,或需封装业务语义时,可单独定义 Comparator:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 新建类实现
Comparator<person></person>,重写compare()方法; - 在排序时传入实例:
Collections.sort(list, new AgeThenNameComparator()); - 也可定义为静态内部类或私有静态字段,便于复用和测试。
对基本类型或 String 列表直接排序
无需额外逻辑,直接调用内置比较器即可:
-
Arrays.asList(3, 1, 4).sort(Comparator.naturalOrder());(升序) -
new ArrayList<string>(Arrays.asList("c", "a", "b")).sort(String.CASE_INSENSITIVE_ORDER);</string>(忽略大小写) - 注意:原始类型数组(如
int[])不支持直接排序,需转为Integer[]或用Arrays.sort()原生方法。
注意事项与常见坑
避免运行时异常和逻辑错误:
- 确保元素非 null,否则
NullPointerException;可提前过滤或用Comparator.nullsFirst()/nullsLast() - 自定义
compare()必须满足自反性、对称性、传递性,否则sort()行为未定义; -
ArrayList.sort()是就地排序(修改原列表),如需保留原顺序,请先new ArrayList(original)复制; - JDK 8+ 推荐用
list.sort(...),它比Collections.sort(list, ...)略高效且更直观。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










