22. Поиск Person по имени #
Условие задачи:
🔍 Реализовать метод findPersonByName
, который ищет объект Person
в списке по имени.
📌 Если человек найден – вернуть Optional<Person>
, иначе вернуть Optional.empty()
.
📌 Пример:
class Person {
String name;
Integer age;
}
Optional <Person> findPersonByName(List<Person> persons, String name) {
return null;
}
Спойлеры к решению
Подсказки
Подсказки:
💡 Используй
💡 Можно использовать
💡
💡 Используй
Optional
для обработки случая, когда человек не найден.💡 Можно использовать
stream().filter().findFirst()
, for-each
или for
-цикл.💡
equalsIgnoreCase()
поможет искать без учета регистра.Решение
Решение:
📌 1. Через Stream API (кратко и элегантно)
import java.util.List;
import java.util.Optional;
class Person {
String name;
Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class PersonFinder {
public static Optional<Person> findPersonByName(List<Person> persons, String name) {
return persons.stream()
.filter(p -> p.name.equalsIgnoreCase(name))
.findFirst();
}
public static void main(String[] args) {
List<Person> persons = List.of(
new Person("Alice", 25),
new Person("Bob", 30)
);
System.out.println(findPersonByName(persons, "Alice")); // Optional[Person{name='Alice', age=25}]
System.out.println(findPersonByName(persons, "John")); // Optional.empty
}
}
✅ Сложность: O(n) – в худшем случае перебираем весь список.
📌 2. Через обычный for
-цикл
public static Optional<Person> findPersonByName(List<Person> persons, String name) {
for (Person person : persons) {
if (person.name.equalsIgnoreCase(name)) {
return Optional.of(person);
}
}
return Optional.empty();
}
📌 Когда использовать? Если не хочется использовать Stream API
.
🚀 Вывод:
✅ Stream API – лаконичное и удобное решение.
✅ Цикл for
– классика, иногда читается проще.
✅ Теперь ты можешь быстро искать людей по имени! 🔥