【发布时间】:2018-03-27 21:33:40
【问题描述】:
我有一个令牌列表,这个列表必须包含只有一个元素处于活动状态。如果没有一个元素的状态等于 active,我需要抛出一个异常。
我想用 lambda 表达式写这个,这是我的代码:
List<Token> listResult = tokenRepository.findByReference(tokenRefId);
if (listResult == null || listResult.isEmpty()) {
throw new IllegalStateException(Messages.TOKEN_NOT_FOUND);
}
if (listResult.stream().filter(t -> t.getStatus().equals(TokenStatus.ACTIVE.code())).count() != 1) {
throw new IllegalStateException(Messages.ONE_TOKEN_MUST_BE_ACTIVATED);
}
Token token = listResult.stream().filter(t -> t.getStatus().equals(TokenStatus.ACTIVE.code()))
.findFirst().orElseThrow(() -> new IllegalStateException(Messages.ONE_TOKEN_MUST_BE_ACTIVATED));
请注意,我两次抛出相同的异常。如何检查是否只有一个元素处于活动状态并在同一个 lambda 表达式中获取它?
【问题讨论】: