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

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);
    }
}

代码说明

  1. 类型优先级映射:用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;
    })
    
  2. 链式排序:thenComparing()方法会在类型优先级相同的场景下,按演员名称的自然字母顺序排序(默认升序,如需降序可追加.reversed())。

输出结果

运行代码后会得到符合规则的排序结果:

Alice (Artist)
Anna (Artist)
David (Producer)
Bob (Mixer)
Charlie (Other)

内容的提问来源于stack exchange,提问作者Carlos Gonzalez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:15:40