Dlaczego nie można po prostu zastąpić metodę z:
public Optional<Employee> findEmployeeById(String id) {
List<Employee> empList = .. //some db query
return (empList.isEmpty() ? Optional.empty() :
Optional.ofNullable(empList.get(0)));
}
proponuję owinąć empList.get(0)
w Optional.ofNullable
w przypadku nadal może być null.
Jeśli chodzi o , dlaczego jest lepszy: pomyśl o wywołującej metodę. Ktokolwiek teraz nazywa twoją metodę musi myśleć co właściwie zrobić, gdy wynik jest empty
.
Poza tym jesteś teraz przymusowej do pisania kodu, takich jak:
Optional<Employee> emp = findEmployeeById("12");
if (emp.isPresent()) {
} else {
....
}
Można również łańcuch to, by stać się bardziej płynnie jak:
emp.orElseThrow(RuntimeException::new)
lub innymi metodami opcjonalne.
Po prostu nie jest tak po powrocie pracownika. Nawet nie myślisz (zazwyczaj), aby sprawdzić, czy odniesienie jest zerowe.
Dzięki temu Twój kod jest mniej podatny na błędy i łatwiejszy do zrozumienia.
Dlaczego zapytanie nie zwraca tylko jednego wyniku? – Marvin
To jest złożona logika ... lewych złączeń i wszystkich .... Rozumiem, że punkt, ale nie mogę naprawdę zmienić tego – coder25
'return empList.isEmpty()? Opcjonalne.empty(): Opcjonalne.of (empList.get (0)); ' – Jesper