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