如何计算元素并在Java 8中找到第一个

时间:2017-10-16 11:15:03

标签: java lambda java-8

我有一个令牌列表,此列表必须包含只有一个元素且具有活动状态。如果没有一个状态等于活动的元素我需要抛出异常。

我想用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表达式中?

1 个答案:

答案 0 :(得分:6)

您可以创建最多两个List的{​​{1}},然后检查其大小:

Token