@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);
}
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