【问题标题】:Is there some way to change this code into functional code?有没有办法将此代码更改为功能代码?
【发布时间】:2021-04-30 15:37:34
【问题描述】:

我有这个方法,我想是否有更好的方法来编写它(比如在函数式编程/流/可选映射中)?这些 if else 看起来不太好。

public VerificationResult verifyToken(String token) {

    Optional<VerificationToken> verificationToken = repository.findByToken(token);

    if (verificationToken.isPresent()) {
        LocalDateTime tokeExpirationDate = verificationToken.get().getExpiryDate().plusMinutes(tokenExpiryTimeInMinutes);
        if (LocalDateTime.now().isBefore(tokeExpirationDate)) {
            return VerificationResult.VALID;
        } else {
            return VerificationResult.EXPIRED;
        }
    } else {
        return VerificationResult.INVALID;
    }
}

【问题讨论】:

    标签: java functional-programming java-stream optional


    【解决方案1】:

    您可以使用Optional API 将整个操作保持在同一个可选链中,而不是立即解包。

    public VerificationResult verifyToken(String token) {
        return repository.findByToken(token)
            .map(found -> found.getExpiryDate())
            .map(expiryDate -> expiryDate.plusMinutes(tokenExpiryTimeInMinutes))
            .map(tokeExpirationDate -> LocalDateTime.now().isBefore(tokeExpirationDate)
                ? VerificationResult.VALID
                : VerificationResult.EXPIRED
            )
            .orElse(VerificationResult.INVALID);
    }
    

    这更多地使用了Optional,否则你只是把它当作一个普通的null值。

    【讨论】:

    • 这正是我的意思!你问的越多你知道的越多:) 谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多