You need to enable JavaScript to run this app. 如何使用Collections/Stream API将预约列表转换为带对应预约的医生列表
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Collections/Stream API将预约列表转换为带对应预约的医生列表

实现思路

核心逻辑

通过哈希映射(字典)做中间容器归集同个医生的所有预约,避免重复创建Doctor对象,最终把映射的值转为列表返回即可。

具体步骤

  • 第一步:初始化一个Map<String, Doctor>类型的临时映射容器,key使用医生姓名+专科的组合(避免同名不同专科的医生数据归集错误,如果业务侧确认医生姓名唯一可直接用医生姓名做key)
  • 第二步:遍历输入的所有Appointment对象,每次取出当前预约的doctorName和speciality生成对应key
    • 若当前key在映射中不存在:新建Doctor对象,把当前预约的医生姓名、专科赋值给Doctor对应属性,初始化Doctor的appointments列表并把当前预约加进去,最后将该Doctor对象存入映射
    • 若当前key在映射中已存在:直接取出映射中对应的Doctor对象,把当前预约加入它的appointments列表即可
  • 第三步:遍历完所有预约后,直接取出Map的value集合转为List<Doctor>就是你需要的doctorList

边界注意事项

  • 同一个医生的所有预约的speciality字段应当一致,如果业务侧存在同个医生跨多个专科出诊的情况,需要调整key规则或者前置校验数据一致性
  • 初始化appointments列表时请使用可变集合,避免添加元素时报不支持操作异常

伪代码参考(Java为例)

// 入参:全院预约列表 List<Appointment> appointmentList
public List<Doctor> generateDoctorList(List<Appointment> appointmentList) {
    Map<String, Doctor> doctorMap = new HashMap<>();
    for (Appointment appt : appointmentList) {
        // 生成唯一key
        String key = appt.getDoctorName() + "_" + appt.getSpeciality();
        if (!doctorMap.containsKey(key)) {
            Doctor doctor = new Doctor();
            doctor.setName(appt.getDoctorName());
            doctor.setSpeciality(appt.getSpeciality());
            doctor.setAppointments(new ArrayList<>());
            doctorMap.put(key, doctor);
        }
        // 归集预约
        doctorMap.get(key).getAppointments().add(appt);
    }
    return new ArrayList<>(doctorMap.values());
}

内容的提问来源于stack exchange,提问作者SKM.CODER

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 21:12:00