Как это сделать с помощью collections/stream api

avatar
SKM.CODER
1 июля 2021 в 16:42
49
3
-1

У меня есть это Требование: Создайте каждого врача с соответствующими назначениями и верните список докторов. Входные данные - это список назначений для всей больницы. У меня есть следующее:

Два класса даны со следующими переменными.

Class Appointment{
    
    
    String doctorName;
    DateTime startTime;
    DateTime endTime;
    String speciality;
        
    //Getters-Setters
}

Другой класс:

Class Doctor{
    
    
    String name;
    String speciality;
    List <Appointment> appointments;
    
    //Getters-Setters
    
}

Требование: Создайте каждого врача с соответствующими назначениями и верните список докторов. Входные данные — список назначений для всей больницы.

Может ли кто-нибудь сказать, каким должен быть мой подход?

Источник
Basil Bourque
1 июля 2021 в 16:49
0

Исправьте форматирование.

Basil Bourque
1 июля 2021 в 16:50
0

Плохой заголовок. Перепишите, чтобы резюмировать вашу конкретную техническую проблему.

SKM.CODER
1 июля 2021 в 17:50
0

Спасибо. Готово. Я ценю

Progman
3 июля 2021 в 17:29
0

@SKM.CODER Добро пожаловать в Stack Overflow. Ознакомьтесь с обзором, чтобы узнать, как работает Stack Overflow, и прочтите Как спросить о том, как улучшить качество своего вопроса. Затем посетите справочный центр, чтобы узнать, какие вопросы вы можете задать. Пожалуйста, покажите свои попытки, которые вы пробовали, и проблемы/сообщения об ошибках, которые вы получаете в результате ваших попыток.

Ответы (3)

avatar
Дмитрий Морозов
1 июля 2021 в 17:57
0

Если вам нужны подходящие врачи с назначением как по специальности, так и по имени, то:

        Map<String, List<Appointment>> map = appointmentList
                .stream()
                .collect(Collectors.groupingBy(e -> e.getDoctorName() + e.getSpeciality()));

        List<Doctor> doctors = new ArrayList<>();

        for (String doctorNameAndSpeciality : map.keySet()) {
            List<Appointment> appointments = map.get(doctorNameAndSpeciality);
            if (!appointments.isEmpty()) {
                Doctor doctor = new Doctor();
                Appointment appointment = appointments.get(0);
                doctor.setName(appointment.getDoctorName());
                doctor.setSpeciality(appointment.getSpeciality());
                doctor.addAllAppointments(appointments);
            }
        }
        return doctors;

если вам нужно использовать только "имя", просто удалите "специальность"

avatar
Sai H.
1 июля 2021 в 17:41
0

Вы можете использовать HashMap.

HashMap<Doctor, ArrayList> doctorList = new HashMap<>();

Возможно, это не лучшая идея в вашем случае, главным образом потому, что я не понимаю, чего вы пытаетесь достичь.

avatar
Nambi Rajan.P
1 июля 2021 в 17:30
0

Надеюсь, это поможет вам. Используйте карту, чтобы поддерживать встречи каждого врача. В приведенном ниже коде вы можете получить информацию о приеме, используя имя врача.

`//назначения - список ввода

Map<String, List<Appointment>> map = new HashMap<>();
    for(Appointment app : appointments) {
        if(!map.containsKey(app.getDoctorName())) {
            List<Appointment> li = new ArrayList<>();
            li.add(app);
            map.put(app.getDoctorName(),li);
        } else {
            map.get(app.getDoctorName()).add(app);
        }       
    }`