java - 如何在没有 if 构造的情况下引发异常

标签 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
}

最佳答案

您可以使用 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);
}

关于java - 如何在没有 if 构造的情况下引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45462021/

相关文章:

java - 位图工厂抛出 FileNotFoundException

java - 什么是 Java BE?

c++ - Lambda machine-dependent segmentation-fault(可能是编译器错误?)

c# - 表达式 <Func< - 运算符 '||' 不能应用于类型 'lambda expression' 和 'lambda expression' 的操作数

java - 使用迭代器迭代集合是否比普通迭代更高效

c# - 将属性名称列表作为 Lambda 表达式传递的最佳方法

java - 使用java流,将两个具有相同键但不同值的映射合并到一个元组中?

java - 使用 Java Stream API 求减法总和

java - Java 中是否有可能从 2 个 Stream 中创建一个新 Stream?

java - 将项目添加到 RecyclerView 的底部