Lambda 如何使用Java1.8和Spring5以函数式编程风格重新编写返回空Mono对象的逻辑

Lambda 如何使用Java1.8和Spring5以函数式编程风格重新编写返回空Mono对象的逻辑,lambda,java-8,functional-programming,spring-webflux,Lambda,Java 8,Functional Programming,Spring Webflux,下面的代码混合了命令式编程风格和函数式编程风格,在使用JDK1.8和Spring5构建的Java应用程序中使用Lambda 公共Mono updateEmpDetails(字符串compId、字符串userId、, (字符串城市){ logger.info(“输入updateEmpDetails@EmployeeService"); 最终用户密钥UserKey=getCommerceObj(compId,userId); 可选emp=EmployeeRepository.findById(use

下面的代码混合了命令式编程风格和函数式编程风格,在使用JDK1.8和Spring5构建的Java应用程序中使用Lambda

公共Mono updateEmpDetails(字符串compId、字符串userId、, (字符串城市){

logger.info(“输入updateEmpDetails@EmployeeService");
最终用户密钥UserKey=getCommerceObj(compId,userId);
可选emp=EmployeeRepository.findById(userKey);
if(emp.isPresent()){
Employee empObj=emp.get();
塞特西城(城市);
最终Mono Employee=asyncRunner
.1(()->EmployeeRepository.saveAndFlush(empObj))
.doOnNext(值->新建CommonService().refreshMap())
.doon错误(错误->记录器.error(“持久化Emp用户对象时出错:”,错误))
.map(EmployeeObj->EmployeeObj);
logger.info(“正在退出updateEmpDetails@EmployeeService");
返回员工;
}否则{
返回null;
}
}
我使用isPresent()设置了if条件,以确保Employee对象在Optional中不为null


我想从else条件中删除它的return null检查,这样每当有空Mono的Employee时,只需返回空Mono即可。我不熟悉lambda和函数式编程。请让我知道如何重新编写这个逻辑,并请让我理解,以便我可以在未来自己做这件事。谢谢

您可以使用
map
orElse
功能,如下所示:

public Mono updateEmpDetails(String compId, String userId, String city) {
    logger.info("Entering updateEmpDetails@EmployeeService");
    final UserKey userKey = getCommerceObj(compId, userId);
    Optional <Employee> emp = EmployeeRepository.findById(userKey);
    return emp.map(e -> updateEmployee(e, city)).orElse(Mono.empty());
}

private Mono<Employee> updateEmployee(Employee empObj, String city) {
    empObj.setCity(city);
    final Mono<Employee> Employee = asyncRunner
                .one(() -> EmployeeRepository.saveAndFlush(empObj))                 
                .doOnNext(value -> new CommonService().refreshMap())
      .doOnError(error -> logger.error("Error while persisting Emp User Object: ", error))
      .map(EmployeeObj -> EmployeeObj);
    logger.info("Exiting updateEmpDetails@EmployeeService");
    return Employee;
}
public Mono updateEmpDetails(字符串compId、字符串userId、字符串city){
logger.info(“输入updateEmpDetails@EmployeeService");
最终用户密钥UserKey=getCommerceObj(compId,userId);
可选emp=EmployeeRepository.findById(userKey);
返回emp.map(e->updateEmployee(e,city)).orElse(Mono.empty());
}
私人Mono updateEmployee(雇员empObj,字符串城市){
塞特西城(城市);
最终Mono Employee=asyncRunner
.1(()->EmployeeRepository.saveAndFlush(empObj))
.doOnNext(值->新建CommonService().refreshMap())
.doon错误(错误->记录器.error(“持久化Emp用户对象时出错:”,错误))
.map(EmployeeObj->EmployeeObj);
logger.info(“正在退出updateEmpDetails@EmployeeService");
返回员工;
}
public Mono updateEmpDetails(String compId, String userId, String city) {
    logger.info("Entering updateEmpDetails@EmployeeService");
    final UserKey userKey = getCommerceObj(compId, userId);
    Optional <Employee> emp = EmployeeRepository.findById(userKey);
    return emp.map(e -> updateEmployee(e, city)).orElse(Mono.empty());
}

private Mono<Employee> updateEmployee(Employee empObj, String city) {
    empObj.setCity(city);
    final Mono<Employee> Employee = asyncRunner
                .one(() -> EmployeeRepository.saveAndFlush(empObj))                 
                .doOnNext(value -> new CommonService().refreshMap())
      .doOnError(error -> logger.error("Error while persisting Emp User Object: ", error))
      .map(EmployeeObj -> EmployeeObj);
    logger.info("Exiting updateEmpDetails@EmployeeService");
    return Employee;
}