Отфильтруйте null-элементы, сравните fullName с targetName и верните findFirst(). При отсутствии совпадения получится Optional.empty().
Нахождение пользователя в списке по имени
Отфильтруйте null-элементы, сравните fullName с targetName и верните findFirst(). При отсутствии совпадения получится Optional.empty().
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо написать функцию, которая просматривает список объектов‑пользователей и возвращает тот, у кого имя совпадает с переданным параметром.
class Person {
String fullName;
int age;
}
Optional<Person> findByName(List<Person> persons, String targetName)
Ответ
Отфильтруйте null-элементы, сравните fullName с targetName и верните findFirst(). При отсутствии совпадения получится Optional.empty().
Optional<Person> findByName(List<Person> persons, String targetName) {
java.util.Objects.requireNonNull(persons);
java.util.Objects.requireNonNull(targetName);
return persons.stream()
.filter(java.util.Objects::nonNull)
.filter(p -> targetName.equals(p.fullName))
.findFirst();
}
Сравнение чувствительно к регистру, а targetName=null здесь запрещён явно. Если совпадений несколько, выбирается первый по порядку списка. Время O(n) в худшем случае; полную коллекцию результатов собирать не требуется.