如何在Java8中计算元素并找到第一个
我有一个令牌列表,该列表必须只包含一个处于活动状态的元素。如果没有一个元素的状态等于active,我需要抛出一个异常 我想用lambda表达式来写这个,这是我的代码:如何在Java8中计算元素并找到第一个,java,lambda,java-8,Java,Lambda,Java 8,我有一个令牌列表,该列表必须只包含一个处于活动状态的元素。如果没有一个元素的状态等于active,我需要抛出一个异常 我想用lambda表达式来写这个,这是我的代码: List<Token> listResult = tokenRepository.findByReference(tokenRefId); if (listResult == null || listResult.isEmpty()) { throw new IllegalStateException(Messa
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));
List listreult=tokenRepository.findByReference(tokenRefId);
if(listResult==null | | listResult.isEmpty()){
抛出新的IllegalStateException(未找到Messages.TOKEN);
}
if(listResult.stream().filter(t->t.getStatus().equals(TokenStatus.ACTIVE.code())).count()!=1){
抛出新的非法状态异常(消息。必须激活一个令牌);
}
Token Token=listResult.stream().filter(t->t.getStatus().equals(TokenStatus.ACTIVE.code()))
.findFirst().OrelsThrow(()->new IllegalStateException(消息。必须激活一个令牌));
请注意,我两次抛出相同的异常。如何检查是否只有一个元素处于活动状态,并在同一个lambda表达式中获取它 您可以创建最多两个
令牌的列表
,然后检查其大小:
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);
已筛选列表=
listResult.stream()
.filter(t->t.getStatus().equals(TokenStatus.ACTIVE.code()))
.限额(2)
.collect(Collectors.toList());
如果(filtered.size()!=1){
抛出新的非法状态异常(消息。必须激活一个令牌);
}
令牌=已筛选。获取(0);