Вывести уникальные специализации

80. Вывести уникальные специализации

Условие задачи:
Дан список объектов Appointment.

Каждый объект содержит:

  • имя врача doctorName;
  • специализацию specialization.

Необходимо с помощью Stream API вывести все уникальные специализации врачей из списка.

Код:

public class Main {
    public static void main(String[] args) {
        List<Appointment> list = List.of(
                new Appointment("Иванов", "Терапевт"),
                new Appointment("Петрова", "Хирург"),
                new Appointment("Сидоров", "Терапевт"),
                new Appointment("Кузнецова", "Кардиолог"),
                new Appointment("Жуков", "Хирург")
        );

        // TODO: вывести уникальные
        // специализации
    }
}

class Appointment {
    private String doctorName;
    private String specialization;

    public Appointment(String d, String s) {
        this.doctorName = d;
        this.specialization = s;
    }

    public String getDoctorName() {
        return doctorName;
    }

    public String getSpecialization() {
        return specialization;
    }
}

Для приведённого списка результат:

Терапевт
Хирург
Кардиолог

Спойлеры к решению

Подсказки
💡 Создай поток из списка с помощью stream().
💡 Через map() преобразуй каждый объект Appointment в его специализацию.
💡 Для удаления повторяющихся значений используй distinct().
💡 Для вывода результата можно применить forEach(System.out::println).

Решение
list.stream()
        .map(Appointment::getSpecialization)
        .distinct()
        .forEach(System.out::println);

Сначала:

.map(Appointment::getSpecialization)

преобразует поток объектов Appointment в поток специализаций.

Для исходных данных получится:

Терапевт
Хирург
Терапевт
Кардиолог
Хирург

Затем:

.distinct()

удаляет повторяющиеся значения.

После этого остаются:

Терапевт
Хирург
Кардиолог

И наконец:

.forEach(System.out::println);

выводит каждую специализацию в консоль.

Временная сложность в среднем — O(n), дополнительная память — O(k), где k — количество уникальных специализаций.