S34*_*34N 1 java lambda optional java-8 java-stream
我被告知不要.anyMatch(Predicate.isEqual(true))被同事使用.原因是,它不是无效的.他们建议我应该使用Optional<Boolean>.
我有一个帐户列表,我想true只有在帐户有未偿还的活跃贷款时才返回布尔值,否则返回false.
@Data
public class Account {
private String accountNumber;
@Getter(AccessLevel.NONE)
private Boolean activeLoan;
private String accountReference;
private Double balance;
private String status;
public Boolean hasActiveLoan() {
return activeLoan;
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,只有当hasActiveLoan()等于真时.
以下是我提出的解决方案:
Boolean checkActiveLoanRule(List<Account> accounts) {
Optional<Boolean> loanAccountExists = Optional.of(accounts.stream()
.map(Account::hasActiveLoanAccount)
.anyMatch(Predicate.isEqual(true)));
return loanAccountExists.equals(Optional.of(true));
}
Run Code Online (Sandbox Code Playgroud)
这可以重构以某种方式改进吗?还有其他想法吗?
最重要的是,这样的解决方案是线程安全的吗?
你的同事错了.Predicate.isEqual()是安全的.您可以通过阅读文档,运行测试或检查源来进行验证.
至于Stream.anyMatch(),它返回一个原语boolean,开头不能为null.
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |