Java Comparator复杂逻辑实现:演员列表排序需求咨询
解决方案
核心思路
先为不同演员类型定义优先级权重,权重越小排序越靠前:
- "Artist" → 0
- "Producer" → 1
- "Mixer" → 2
- 其他类型 → 3
通过链式Comparator先按优先级权重排序,再按演员名称的字母顺序排序,即可满足需求。
代码实现
假设你的演员类是CastMember,包含getType()和getName()方法:
import java.util.Comparator; import java.util.List; // 示例演员类 class CastMember { private String type; private String name; public CastMember(String type, String name) { this.type = type; this.name = name; } public String getType() { return type; } public String getName() { return name; } @Override public String toString() { return name + " (" + type + ")"; } } public class CastSortExample { public static void main(String[] args) { List<CastMember> cast = List.of( new CastMember("Mixer", "Bob"), new CastMember("Artist", "Alice"), new CastMember("Other", "Charlie"), new CastMember("Producer", "David"), new CastMember("Artist", "Anna") ); // 链式Comparator实现排序规则 Comparator<CastMember> castComparator = Comparator // 第一步:按类型优先级排序 .comparingInt(member -> switch (member.getType()) { case "Artist" -> 0; case "Producer" -> 1; case "Mixer" -> 2; default -> 3; }) // 第二步:同类型按名称字母序排序 .thenComparing(CastMember::getName); // 执行排序 cast.sort(castComparator); // 输出结果验证 cast.forEach(System.out::println); } }
代码说明
- 类型优先级映射:用
switch表达式快速将类型转换为整数权重,确保优先级高的类型排在前面。如果是Java 8及以下版本,可替换为if-else写法:// Java 8兼容写法 .comparingInt(member -> { if ("Artist".equals(member.getType())) return 0; else if ("Producer".equals(member.getType())) return 1; else if ("Mixer".equals(member.getType())) return 2; else return 3; }) - 链式排序:
thenComparing()方法会在类型优先级相同的场景下,按演员名称的自然字母顺序排序(默认升序,如需降序可追加.reversed())。
输出结果
运行代码后会得到符合规则的排序结果:
Alice (Artist) Anna (Artist) David (Producer) Bob (Mixer) Charlie (Other)
内容的提问来源于stack exchange,提问作者Carlos Gonzalez
相关产品推荐
相关产品推荐

