我有一个令牌列表,此列表必须包含只有一个元素且具有活动状态。如果没有一个状态等于活动的元素我需要抛出异常。
我想用lambda expresssions写这个,这是我的代码:
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表达式中?
答案 0 :(得分:6)
您可以创建最多两个List
的{{1}},然后检查其大小:
Token