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 — количество уникальных специализаций.