当前位置: 首页 > 知识库问答 >
问题:

Java8optional.map.orElse正在执行orElse部分[重复]

耿玄裳
2023-03-14
@PostMapping(path = "/addUser", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Response> addUser(@RequestBody User user){
        
        user = userService.checkIfUserExsits(user.getEmail())
                          .map(usr -> usr)
                          .orElse(userService.persistUser(user));
        
        return respHelpers.prepareSuccessResponse(user,"Processed");                                       
    }
public Optional<User> checkIfUserExsits(String email){      
    Optional<User> user = Optional.ofNullable(userRepo.findByEmail(email));     
    return user;
}
@Repository
public interface UserRepo extends JpaRepository<User, UUID> {

    public User findByEmail(String email); 

}

共有1个答案

邹涵畅
2023-03-14

orelse()是一个方法,当您调用该方法时,它的参数会在它的主体执行之前得到计算。因此,始终执行userservice.persistuser(user)

您应该使用orelseget:

    user = userService.checkIfUserExsits(user.getEmail())
                      .map(usr -> usr)
                      .orElseGet(() -> userService.persistUser(user));

这样,只有当可选的为空时,lambda表达式的主体才会执行。

 类似资料:
  • 为什么这段代码会抛出异常?为什么它还要去“奥雷尔斯”分店? 这是因为某种怪异的处决令吗?那么在计算orElse分支之前没有设置第一个可选项的值?

  • 但是抓住 以重复的方式?

  • 在下面的代码中,我试图理解java-8中提供的可选的概念。我创建了下面的例子来掌握orElse()背后的原理。执行代码后,defaultmethod()的主体被执行,并返回 对象y。log语句按照我的预期打印了正确的数据。 问题是,为什么defaultMethod()中的所有日志都没有打印??引入is-orElse()仅返回值,而不执行所提供方法的整个主体。? 代码: 日志:

  • 返回位于给定的基于一的行和列索引处的该矩阵的条目。如果行或列不是1或2,则引发异常。 这是我的方法的代码,但即使我使用参数row=1和col=2调用该方法;它显示了IndexOutOfBoundsException。有没有办法解决这个问题?

  • 我在玩Java的可选代码,认为它的工作原理就像一个if else块。但是在下面的代码中,即使变量不是,也会执行块的内容。有什么解释吗? 产出:

  • 批处理是重复的动作-无论是作为一个简单的优化,或作为工作的一部分。策划和归纳重复以及提供一个相当于迭代器的框架,Spring Batch提供RepeatOperations接口,这个RepeatOperations接口看起来像是这样: public interface RepeatOperations { RepeatStatus iterate(RepeatCallback callba