Java8可选内部可选

Java8可选内部可选,java,java-8,Java,Java 8,我以以下方式使用Optional进行事务管理 EmployeeBo transactionResult = Optional.ofNullable(service.save(employeeBo)) .filter(o -> o.getId() !=null && o.getId() > 0) .map(employeeBo1 -> { Boolean resultFileController

我以以下方式使用Optional进行事务管理

    EmployeeBo transactionResult =
    Optional.ofNullable(service.save(employeeBo))
        .filter(o -> o.getId() !=null && o.getId() > 0)
        .map(employeeBo1 -> {
          Boolean resultFileController =
              Optional.ofNullable(fileController.increaseUsedById(Authorization, fileIds))
                  .filter(o1 -> o1.getStatusCode().equals(HttpStatus.OK))
                  .map(fileResponse -> {
                    ResponseEntity<ObjectResponseBo> userResponse = null;
                    try {
                      userResponse = userService.addUser(Authorization, populateUser(employeeBo.getId()));
                    } catch (Exception e) {
                      e.printStackTrace();
                    }
                    Boolean resultUserService = Optional.ofNullable(userResponse)
                        .filter(o2 -> o2.getStatusCode().equals(HttpStatus.CREATED))
                        .map(o3 -> {
                          logger.debug(()-> "User Added successfully !! ");
                          return true;
                        }).orElseGet(() -> {
                          logger.debug(()->"User Not Added successfully !! ");
                          return false;
                        });
                    //Rollback File
                    if (resultUserService == Boolean.FALSE) {
                      fileController.decreaseUsedById(Authorization, fileIds);
                      logger.debug(()->"File Rollbacked !! ");
                      return false;
                    }
                    logger.debug(()->"File Update successfully !! ");
                    return true;
                  }).orElseGet(() -> {
                    logger.debug(()->"File record updation failed !! ");
                    return false;
                  });
          //Rollback Employee
          if (resultFileController == Boolean.FALSE) {
            service.delete(employeeBo1.getId());
            logger.debug(()->"Rollback Company successfully !! ");
            return employeeBo;
          }
          logger.debug(()->"Company Saved successfully !! ");
          return employeeBo1;
        }).orElseGet(() -> {
        logger.debug(()->"Company Saved failed !! ");
        return null;
        });
EmployeeBo交易结果=
可选。不可用(service.save(employeeBo))
.filter(o->o.getId()!=null&&o.getId()>0)
.map(雇员人数1->{
布尔结果文件控制器=
可选.ofNullable(fileController.increaseUsedById(授权,fileID))
.filter(o1->o1.getStatusCode().equals(HttpStatus.OK))
.map(文件响应->{
ResponseEntity userResponse=null;
试一试{
userResponse=userService.addUser(授权,populateUser(employeeBo.getId());
}捕获(例外e){
e、 printStackTrace();
}
布尔resultUserService=可选。ofNullable(userResponse)
.filter(o2->o2.getStatusCode().equals(HttpStatus.CREATED))
.map(o3->{
logger.debug(()->“用户添加成功!!”);
返回true;
}).orElseGet(()->{
logger.debug(()->“用户未成功添加!!”);
返回false;
});
//回滚文件
if(resultUserService==Boolean.FALSE){
fileController.decreaseUsedById(授权,文件ID);
debug(()->“文件回滚!!”);
返回false;
}
logger.debug(()->“文件更新成功!!”);
返回true;
}).orElseGet(()->{
logger.debug(()->“文件记录更新失败!!”);
返回false;
});
//回滚员工
if(resultFileController==Boolean.FALSE){
delete(employeeBo1.getId());
logger.debug(()->“回滚公司成功!!”);
返回雇员;
}
logger.debug(()->“公司保存成功!!”);
返回员工BO1;
}).orElseGet(()->{
logger.debug(()->“公司保存失败!!”);
返回null;
});
工作正常。但代码作为可选的内部选项等不容易阅读。实现这种回滚链接的另一种方法是什么?就好像任何一笔交易失败了一样,这意味着上一笔交易我失败了,依此类推


还有别的好办法吗

这是对
Optional
的完全错误的使用,因为它应该只被方法用作返回值。您最好使用普通的空检查,因为此时您的代码不是真正可读的。乍一看,由于使用可选项,它看起来非常复杂。为什么不仅仅是好的
if
语句<代码>可选.ofNullable(…).filter(…).map(…).OrelGet(…)是编写这样的逻辑的一种糟糕的方式。也许你现在可以这样看一下,我怀疑有人真的会花时间来解决这个问题并重新考虑它……Java并没有真正的语言支持这一点;试图基于这样的选项编写代码,与它们提供给您的API不起作用。你最好只在非常简单的事情上使用它们。