3. Найти сотрудника по табельному номеру
Условие задачи:
Дан класс Empl с полями tabNomer и fio.
Необходимо реализовать метод getEmployee, который:
принимает список сотрудников
List<Empl>;принимает табельный номер
tabNomer;находит первого сотрудника с таким табельным номером;
возвращает результат в виде
Optional<Empl>.
Код:
public class Empl {
private String tabNomer;
private String fio;
public Empl(String tabNomer, String fio) {
this.tabNomer = tabNomer;
this.fio = fio;
}
public String getTabNomer() {
return tabNomer;
}
public String getFio() {
return fio;
}
}
public class EmplService {
public Optional<Empl> getEmployee(List<Empl> empls, String tabNomer) {
// TODO
}
}
Спойлеры к решению
Подсказки
💡 Создай поток из списка сотрудников через
💡 Через
💡 Метод
💡 Для безопасного сравнения значений можно использовать
stream().💡 Через
filter() оставь сотрудников с нужным табельным номером.💡 Метод
findFirst() вернёт первый найденный элемент в виде Optional.💡 Для безопасного сравнения значений можно использовать
Objects.equals().Решение
public class EmplService {
public Optional<Empl> getEmployee(List<Empl> empls, String tabNomer) {
return empls.stream()
.filter(employee ->
Objects.equals(employee.getTabNomer(), tabNomer))
.findFirst();
}
}
Сначала:
empls.stream()
создаёт поток сотрудников.
Затем:
.filter(employee ->
Objects.equals(employee.getTabNomer(), tabNomer))
оставляет только сотрудников с нужным табельным номером.
Objects.equals() корректно сравнивает значения даже в случае, если один из табельных номеров равен null.
В конце:
.findFirst()
возвращает первого подходящего сотрудника как Optional<Empl>. Если такой сотрудник не найден, результатом будет Optional.empty().
Временная сложность — O(n) в худшем случае, дополнительная память — O(1).