Dan*_*ais 3 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));
Run Code Online (Sandbox Code Playgroud)
请注意,我两次抛出相同的异常.如何检查是否只有一个具有活动状态的元素并将其置于相同的lambda表达式中?
您最多可以创建List两个Tokens,然后检查其大小:
List<Token> filtered =
listResult.stream()
.filter(t -> t.getStatus().equals(TokenStatus.ACTIVE.code()))
.limit(2)
.collect(Collectors.toList());
if (filtered.size () != 1) {
throw new new IllegalStateException(Messages.ONE_TOKEN_MUST_BE_ACTIVATED);
}
Token token = filtered.get(0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |