Поиск сотрудника по табельному номеру

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).