2017-10-16 2 views
2

토큰 목록이 있습니다.이 목록에는 활성 상태의이 하나만 포함 된 요소 만 포함되어야합니다. 상태 equals가 활성 인 요소가 하나도 없으면 예외를 throw해야합니다.요소 수를 계산하고 Java에서 먼저 찾는 방법 8

나는 람다 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)); 

참고. 활성 상태의 요소가 하나 뿐이며 동일한 람다 식으로 가져올 수 있는지 어떻게 확인할 수 있습니까?

답변

6

당신은 최대 두 Token s의 List을 만든 다음 그 크기를 확인할 수 있습니다

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);