如何在没有if构造的情况下抛出异常

2 java lambda java-8

我创建了一个方法来检查列表中是否有一个具有特定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
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 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);
}
Run Code Online (Sandbox Code Playgroud)

  • _**如果**结果可选为空._你说是否!:-) (3认同)