我有一个接受Optional<LocalDateTime>
的谓词,我想检查它是否存在并且LocalDateTime
在当前日期之前。
我可以使用if语句来编写它,如下所示:
@Override
public boolean test(Optional<ResetPassword> resetPassword) {
if (resetPassword.isPresent()) {
if (!resetPassword.get().getValidUntil().isBefore(LocalDateTime.now())) {
throw new CustomException("Incorrect date");
}
return true;
}
return false;
}
如何使用
Optional.map
和Optional.filter
函数重写它? 最佳答案
绝对不要将Optional
用作任何参数。相反,您应该让函数采用ResetPassword
,并且仅当Optional
的值存在时才调用它。
像这样:
public void test(ResetPassword resetPassword) {
if (!resetPassword.getValidUntil().isBefore(LocalDateTime.now())) {
throw new CustomException("Incorrect date");
}
}
然后这样称呼它:
resetPasswordOptional
.ifPresent(rp -> test(rp));