Не добавлять второй тег ZAP, если уже есть у пациента

Рейтинг: 0Ответов: 1Опубликовано: 07.02.2023

Есть метод, который парсит XML файл и создает другой со следующей структурой: ZAP содержит теги patient, sluch, usl. Каждый тег ZAP описывает данные пациента и тегов sluch может быть у одного пациента несколько.

Нужно если в исходном файле несколько строк row, у которых один и тот же полис не создавая новый тег ZAP добавить в существующий новый случай sluch.

У меня это получилось, но не могу понять как НЕ создавать при этом тег zap второй раз для одного и того же пациента

private static List<Zap> getZapList() {

    List<Row> rowsList = ReadXmlDs.getRowsForXMLDS("C:\\ds_parse\\ds.xml");

    List<Zap> zapList = new ArrayList<>();

    for (int i = 0; i < rowsList.size(); i++) {

        for (Zap zap : zapList) {
            //Если в списке zapList есть такой же полис как в rowsList.get(i).getNpolis()
            if (zap.getPacient().getNpolis().equals(rowsList.get(i).getNpolis())) {

                //То создаем случаи и услуги
                Sluch sluch = createSluch(rowsList.get(i));

                Usl usl = createUsl(rowsList.get(i), sluch);

                createCrit(rowsList.get(i), usl);
                createHrrgd(rowsList.get(i), usl);

                sluch.setUsl(usl);

                zap.getSluchList().add(sluch);
            }
        }

        Zap zap = new Zap();

        Pacient pacient = createPatient(rowsList.get(i));

        Sluch sluch = createSluch(rowsList.get(i));

        Usl usl = createUsl(rowsList.get(i), sluch);

        createCrit(rowsList.get(i), usl);
        createHrrgd(rowsList.get(i), usl);

        sluch.setUsl(usl);

        zap.setPacient(pacient);

        List<Sluch> sluchList = new ArrayList<>();
        sluchList.add(sluch);

        zap.setSluchList(sluchList);

        zapList.add(zap);
    }

    return zapList;
}

Ответы

▲ 0

Не стоит буквально понимать названия переменных :) Ну и что, что sluchList. Используйте Set вместо List и будет вам счастье без лишнего кода и повторений.

        Set<Sluch> sluchList = new LinkedHashSet<>();
        sluchList.add(sluch);

Потом, если в целевой структуре требуется List, то можно сделать так

 zap.setSluchList(new ArrayList<Sluch>(sluchList));