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

如何修改代码将Visits对象关联至对应Doctor与Patient的列表?

同步就诊记录到医生与患者的就诊列表解决方案

已完成patients、doctors、visits三个文件的导入加载,且定义了以下类:

  • Wizyty(Visits)类:关联Lekarze(Doctor)对象、Pacjenci(Patient)对象及就诊日期
  • Lekarze(Doctor)类:包含List<Wizyty> listOfDoctorVisits属性,用于存储该医生的所有就诊记录
  • Pacjenci(Patient)类:包含List<Wizyty> listOfPaitientVisits属性,用于存储该患者的所有就诊记录

当前已实现读取visits文件创建Wizyty对象并加入wizytyList,但需要将每条就诊记录同步添加到对应医生和患者的专属就诊列表中,修改方案如下:


第一步:确保类中列表属性已初始化

在Lekarze和Pacjenci的构造函数中提前初始化就诊列表,避免空指针异常:

// Lekarze类构造函数示例
public Lekarze(/* 其他参数 */) {
    // 初始化其他属性
    this.listOfDoctorVisits = new ArrayList<>();
}

// Pacjenci类构造函数示例
public Pacjenci(/* 其他参数 */) {
    // 初始化其他属性
    this.listOfPaitientVisits = new ArrayList<>();
}

第二步:修改就诊记录读取代码

在创建Wizyty对象并加入wizytyList后,添加代码将该就诊记录同步到对应医生和患者的列表中(先判断对象是否存在,避免空指针):

修改后的完整代码:

List<Wizyty> wizytyList = new ArrayList<>();

try {
    File fileWizyty = new File("src/com/company/pliki/wizyty.txt");
    Scanner readerWizyty = new Scanner(fileWizyty);
    readerWizyty.nextLine(); // 跳过表头
    while (readerWizyty.hasNextLine()) {
        String[] data = readerWizyty.nextLine().trim().split("\t");

        Lekarze lekarze1 = lekarze.stream()
                .filter(m -> m.getIdLekarza() == Integer.parseInt(data[0]))
                .findAny()
                .orElse(null);

        Pacjenci pacjenci1 = pacjent.stream()
                .filter(m -> m.getIdPacjenta() == Integer.parseInt(data[1]))
                .findAny()
                .orElse(null);

        // 仅当找到对应的医生和患者时,创建就诊记录并同步
        if (lekarze1 != null && pacjenci1 != null) {
            Wizyty wizyta = new Wizyty(lekarze1, pacjenci1, new SimpleDateFormat("yyyy-MM-dd").parse(data[2]));
            wizytyList.add(wizyta);
            
            // 同步到医生的就诊列表
            lekarze1.getListOfDoctorVisits().add(wizyta);
            // 同步到患者的就诊列表
            pacjenci1.getListOfPaitientVisits().add(wizyta);
        } else {
            // 可选:打印日志提示未找到对应医生/患者
            System.out.println("未找到ID为" + data[0] + "的医生或ID为" + data[1] + "的患者,跳过该就诊记录");
        }
    }
    readerWizyty.close();
} catch (FileNotFoundException e) {
    System.out.println("Error File Wizyty");
    e.printStackTrace();
} catch (ParseException e) {
    e.printStackTrace();
}

关键修改点说明

  1. 空值判断:添加if (lekarze1 != null && pacjenci1 != null)判断,避免因找不到医生/患者导致的空指针异常
  2. 同步添加:在创建Wizyty对象后,调用医生和患者对象的列表add()方法,将当前就诊记录加入对应列表
  3. 可选日志:添加未找到对象时的提示,便于排查数据问题

文件格式示例

Doctor(lekarze.txt)文件

Id_lekarza  Nazwisko    Imie    Specjalnosc Data_urodzenia  NIP PESEL
       23   Kadaj       Monika  laryngolog  1965-03-16  879-122-69-94   65031687654

Patient(pacjenci.txt)文件

Id_pacjenta Nazwisko    Imie    PESEL   Data_urodzenia
     100    Kowal   Waldemar    01211309876 2001-1-13

Visits(wizyty.txt)文件

Id_lekarza  Id_pacjenta Data_wizyty
  23             124    2006-12-13

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:19:47