2017-10-16 8 views
2

私はトークンのリストを持っていますが、このリストにはという要素が1つだけあり、アクティブな状態の要素はです。ステータスが等しいアクティブな要素が1つもない場合は、例外をスローする必要があります。要素を数えて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)); 

注意。アクティブ状態の要素が1つだけで、同じラムダ式で取得できるかどうかを確認するにはどうすればよいですか?

答えて

6

あなたは、最大で2 Token秒の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); 
関連する問題