我正在使用這個邏輯,new Employee()如果找不到員工,我會嘗試回傳。但是,當request.getId()為空時,它會引發例外,我正在等待它執行orElse()部分。然而事實并非如此。那么,我應該使用另一種可選方法嗎orElseGet()?ifPresentOrElse()我怎樣才能以聰明的方式解決這個問題?
Employee employee = employeeRepository.findById(request.getId())
.orElse(new Employee());
uj5u.com熱心網友回復:
對 the 進行 null 處理request.getId()并避免陷入例外怎么樣?
使用以下之一,假設employeeRepository#findById回傳Optional<Employee>:
Employee employee = Optional.ofNullable(request.getId())
.flatMap(id -> employeeRepository.findById(id))
.orElse(new Employee());
Employee employee = Optional.ofNullable(request.getId())
.flatMap(EmployeeRepository::findById)
.ofElse(new Employee());
uj5u.com熱心網友回復:
正如評論中提到的,Optional在這種情況下不會做任何事情。要解決它,您需要自己處理null價值。您可以通過將request.getId()returnOptional本身設為 an 來做到這一點(因為它可以是null)。
現在您可以Optional使用運算子鏈接這些 's flatMap()。
public class MyRequestClass {
private Long id;
// Change your getter to this, or make a new one, eg. 'getOptionalId()'
public Optional<Long> getId() {
return Optional.ofNullable(id);
}
}
現在您可以將代碼重構為:
Employee employee = request
.getId()
.flatMap(employeeRepository::findById) // Using flatMap() in stead of map()
.orElseGet(Employee::new); // I changed this part so that new Employee() is
// called lazily when no Employee was found in
// the database (or when the request has no ID)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/491364.html
上一篇:以CSV格式讀取和存盤游戲狀態
