是否有办法将此代码更改为功能代码?



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

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

您可以使用OptionalAPI将整个操作保持在相同的可选链中,而不是立即展开它。

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值。

最新更新