使用可选映射和过滤器重写if语句

时间:2018-10-31 08:41:18

标签: java validation lambda optional predicate

我有一个接受=的谓词,我想检查它是否存在并且new是否在当前日期之前。

我可以使用if语句来编写它:

Optional<LocalDateTime>

我该如何使用LocalDateTime@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; } 函数来重写它?

2 个答案:

答案 0 :(得分:1)

绝对不要使用Optional作为任何参数。相反,您应该让函数采用ResetPassword,并且仅当存在Optional的值时才调用它。 像这样:

public void test(ResetPassword resetPassword) {
    if (!resetPassword.getValidUntil().isBefore(LocalDateTime.now())) {
        throw new CustomException("Incorrect date");
    }
}

然后这样称呼它:

resetPasswordOptional
    .ifPresent(rp -> test(rp));

答案 1 :(得分:0)

我希望这一程序对您有所帮助,此外,请注意如果是RuntimeException,则在出现错误情况时您的应用将崩溃的异常。

 public boolean test(Optional<ResetPassword> resetPassword) {
        return resetPassword.isPresent() && resetPassword
                .map(ResetPassword::getValidUntil)
                .filter(localDateTime -> localDateTime.isBefore(LocalDateTime.now()))
                .orElseThrow(() -> new CustomException("Incorrect date")) != null;
    }