本文详解如何为 `movie` 类实现 `comparable` 接口,使其按 `type` 优先、`id` 次之升序排序,并确保 `null` 值始终排在末尾。
要实现题目中期望的排序效果——即先按 Type 分组(TYPE_A 在前,TYPE_B 在后),同类型内再按 id 升序排列,同时保证 null 值(无论出现在 type 还是 id)始终被视为“最大”,从而排在列表末尾——最直接且推荐的方式是手动实现 compareTo 方法,并显式处理 null 安全逻辑。
Java 标准库本身不提供开箱即用的多字段 null 安全比较器(如 Apache Commons Lang 的 ObjectUtils.compare() 或 Guava 的 ComparisonChain 可辅助简化,但非必需)。对于本场景,原生实现更轻量、清晰且可控。
以下是优化后的 compareTo 实现,兼顾可读性、健壮性与 null 安全:
@Override
public int compareTo(final Movie other) {
// 1. 先比较 type:null 视为最大,否则按枚举自然序
int typeComparison = Comparator.nullsLast(Comparator.naturalOrder())
.compare(this.type, other.type);
if (typeComparison != 0) {
return typeComparison;
}
// 2. type 相同,再比较 id:null 同样视为最大,Integer 自然序升序
return Comparator.nullsLast(Comparator.naturalOrder())
.compare(this.id, other.id);
}
✅ 关键说明: