我有一个接受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.mapOptional.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));

09-25 21:37