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

Java8抛出异常,如果流返回没有结果[重复]

常英毅
2023-03-14

我很好奇是否可以在以下情况下使用orElseThrow(),或者是否有更Java的8种方法可以将其等效为1行?

Collection<Foo> foo = blah.stream().filter(somePredicate).collect(Collectors.toList());
if (foo.isEmpty()) {
  throw new Exception("blah");
}

共有1个答案

郑声
2023-03-14

你可以试试这个:

Collection<Foo> foo = blah.stream().filter(somePredicate)
    .collect(Collectors.collectingAndThen(Collectors.toList(), Optional::of))
    .filter(l -> !l.isEmpty())
    .orElseThrow(() -> new Exception("blah"))

请注意,与您的代码相比,这会分配一个额外的可选实例。

 类似资料:
  • 为了最大限度地利用java8流和Spring4,我在来自Springs jsdbRestTem板的JDBC结果集上使用了流API,如下所示(代码缩短并简化): 这似乎很有效。客户端可以像这样使用流Api,而不用担心jdbc类 但是,当我重构(尝试将流提供给客户端方法)时,像这样: 我明白了 因此,数据似乎只能在方法。是否有一种干净的方法可以绕过这个问题,返回来自DB的元素的惰性流?假设具体化结果和

  • 我有这个方法,我首先检查一个用户是否是admin,如果你是admin,你将从数据库中得到一个用户列表。但是VS告诉我,我必须在IF admin括号之外再加上一个返回,我完全失去了我应该返回什么?因为你不是管理员,所以你不能返回任何东西

  • 我正在将一个现有项目迁移到Spring Data JPA存储库。 在旧项目中,我的DAO如下所示: 新的Spring JPA实现看起来像这样... 在新版本将返回null,如果没有电影,但我希望它抛出一个异常(最好是我的NoResultExctive,但任何异常都可以)。 我的问题是,我所有的服务都是在预期NoResult异常发生的情况下实现的。 我不想重新使用我所有的服务来检查空值。 有没有办法

  • 我一直在使用异步任务来访问web服务器,并使用结果更新控件。这有缺点,即它使异步方法特定于控件,并阻止我再次使用返回的字符串。 我的典型asyncTask代码如下

  • 我在Quarkus REST应用程序中有几个接受ID的调用。 我使用活动记录模式来处理数据库请求。来自Spring的将在结果集为空时抛出异常。我将使用捕获此异常,并抛出相应的响应代码(在本例中为404)。这也适用于所有其他例外情况。 有没有办法将Panache/Hibernate配置为在空结果集上抛出异常?现在,我必须手动检查结果是否为空/空,然后抛出相应的异常。 例如,这就是我现在要做的: 当我

  • 我已经在Python中通过,它们看起来都非常相似。为什么?如何随机化它们?