2017-08-02 11 views
2

特定のIDを持つリストに要素があるかどうかをチェックするメソッドを作成しました。存在しない場合は例外をスローします。私はちょうどmatchの値がfalseであるかどうかをチェックする方法を知らないので、私の例外AccessToMessageForbiddenExceptionをスローします。if構造体なしで例外をスローする方法

private void validMessage(Long messageId) { 
    List<Message> messageList = messageService.findBySender(1L); 
    messageList.addAll(messageService.findByRecipient(1L)); 

    boolean match = messageList.stream().anyMatch(v -> messageId.equals(v.getId())); 

    //How to throw an exception without an if construct 
} 
+11

をスローするように消費者を使用することができます? – Eran

+0

if文を使用できないのはなぜですか? – Asew

+0

試してみてはどうですか? – BaneDad

答えて

7

代わりanyMatchfindAny()を使用し、そして得られたOptionalが空の場合に例外をスローすることができます。

これにはif文は必要ありません。ただ、Optionalが空の場合に例外をスローした、orElseThrow()を使用します。

private void validMessage(Long messageId) { 
    List<Message> messageList = messageService.findBySender(1L); 
    messageList.addAll(messageService.findByRecipient(1L)); 

    messageList.stream() 
       .filter(v -> messageId.equals(v.getId())) 
       .findAny() 
       .orElseThrow(AccessToMessageForbiddenException::new); 
} 
+3

_ ** if **結果のオプションが空です._あなたが言った場合! :-) –

+1

@JFPicard編集 – Eran

+1

@ Eran +1を参照してください。しかし、 'orElseThrow'はまだ内部的にif文です。まだこれははるかにクリーンです – Eugene

0

あなたはストリームのオプションを取得し、if文を使用してと間違って何例外

Consumer<Message> d = t -> { 
     throw new CustomException("Message: " + Message.toString()); 
}; 


messageList.stream().filter(yourFilterPredicate).findAny().ifPresent(d); 
関連する問題