当前位置: 首页 > 知识库问答 >
问题:

如果筛选器返回大小为0的列表,则引发异常

贺正祥
2023-03-14

在以下代码中:

myList.stream()
    .filter(item -> someMethod(item))
    .map(item -> doSomething(item))
    .collect(Collectors.toList());

如果过滤器的结果是大小为0的列表(即没有项目通过过滤器),我如何抛出RuntimeException

共有2个答案

皇甫鸿远
2023-03-14

由于没有直接的方法来检查Java 8流是否为空?,更可取的代码是:

List<SomeObject> output = myList.stream()
        .filter(item -> someMethod(item))
        .map(item -> doSomething(item))
        .collect(Collectors.toList());
if (!myList.isEmpty() && output.isEmpty()) {
    throw new RuntimeException("your message");
} 

另一种替代方法是使用非匹配,在执行之前进行验证,例如:

if (myList.stream().noneMatch(item -> someMethod(item))) {
    throw new RuntimeException("your message");
}
卫俊誉
2023-03-14

您可以使用CollectingAnd,然后:

    myList.stream()
            .filter(item -> someMethod(item))
            .map(item -> doSomething(item))
            .collect(Collectors.collectingAndThen(Collectors.toList(), result -> {
                if (result.isEmpty()) throw new RuntimeException("Empty!!");
                return result;
            }));
 类似资料:
  • 问题内容: 我有一个位置数据库。当我尝试将它们转换为坐标以便将它们放置在地图上时,会出现错误。我的地址类型地址列表的大小为零。我研究了这个话题。我所有的清单权限均正确。我的手机已连接到互联网。我已经重启了手机。我知道有一个Google问题,解决方案也无济于事。位置准确。请帮忙。 这是错误消息:android.database.CursorIndexOutOfBoundsException:已请求索

  • 我正在尝试从数据库的某一行获取文本。为此,我做了这个函数 我这样称呼它: 我的桌子看起来像这样: 我得到这个错误: 为什么我会犯这个错误?我做错了什么? 提前感谢。

  • 问题内容: 在MySQL中,是否可以将“总计”字段设置为零(如果它们为NULL)? 这是我所拥有的: 数据输出正常,但NULL字段应为。 如何在MySQL中为NULL返回0? 问题答案: 使用IFNULL: 从文档中: 如果expr1不为NULL,则IFNULL()返回expr1; 否则返回expr2。IFNULL()返回数字或字符串值,具体取决于使用它的上下文。

  • 我目前有一个RESTfulWebService跑步服。我最近添加了一个过滤器,它可以执行一些auth操作,并且可以在happy path的情况下工作。但是,当我需要从这个过滤器中抛出一个错误时,它不会将异常序列化为一个漂亮的json字符串,而是抛出一个500,错误如下: 问题是,我不想在应用程序/八位字节流中写入任何内容。我的服务只使用。这在我的实际类中不是问题,我可以在这些类中指定注释。从资源主

  • 我有一个带有键的HashMap,值是字符串。我想通过以字符串“locationid”开头的键值过滤HashMap,并将键中的值返回到字符串数组列表中。HashMap的填充方式如下: 我需要arraylist中的ORG_Id值。 我找不到可以将值放入字符串列表的位置。编译错误是它不识别values()方法。 更新还尝试将筛选后的Hashmap放入另一个Hashmap中,如下所示: 但得到的编译错误是

  • 我检查了这个问题,在elasticsearch中查询DSL中必须和过滤器有什么区别?并阅读答案。 据我所知,必须和过滤器应该返回相同的结果。我说的对吗?但是当我把过滤查询改为必须时,我收到了更多的结果?我做错了什么? 我比较了过滤器,必须查询并得到不同的结果。