Поиск человека по имени (Stream API)

9. Найти человека по имени

Условие задачи:
Дан класс Person с полями name и age.

Необходимо реализовать метод, который:

  • принимает список List<Person>;

  • ищет человека по имени;

  • возвращает первого найденного человека в виде Optional<Person>;

  • использует Stream API.

Код:

class Person {
    String name;
    Integer age;
}

Optional<Person> findPersonByName(List<Person> persons, String name) {
    // ...
}

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

Подсказки
💡 Создай поток из списка через stream().
💡 Через filter() оставь только людей с нужным именем.
💡 Для безопасного сравнения строк можно использовать Objects.equals().
💡 findFirst() вернёт первый подходящий элемент в виде Optional<Person>.

Решение
Optional<Person> findPersonByName(List<Person> persons, String name) {
    return persons.stream()
            .filter(person -> Objects.equals(person.name, name))
            .findFirst();
}

Условие:

.filter(person -> Objects.equals(person.name, name))

оставляет только людей с нужным именем.

Objects.equals() корректно сравнивает значения даже в случае, если одно или оба имени равны null.

Затем:

.findFirst()

возвращает первого найденного человека как Optional<Person>. Если подходящего человека нет, результатом будет Optional.empty().

Временная сложность — O(n) в худшем случае, дополнительная память — O(1).