我创建了一个方法来检查列表中是否有一个具有特定id的元素,如果它不存在则抛出异常。我只是不知道如何检查match
值是否为false
,然后抛出我的异常AccessToMessageForbiddenException。
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
}
答案 0 :(得分:7)
您可以使用findAny()
代替anyMatch
,如果结果Optional
为空,则抛出异常。
这不需要if语句。只需使用orElseThrow(),如果Optional
为空,则会引发异常:
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);
}
答案 1 :(得分:0)
您可以获取Stream的可选项并使用使用者引发异常
Consumer<Message> d = t -> {
throw new CustomException("Message: " + Message.toString());
};
messageList.stream().filter(yourFilterPredicate).findAny().ifPresent(d);