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

在不改变未来的情况下,什么样的正确方法可以束缚未来?

松建本
2023-03-14

假设我有两个函数返回一种Future。

ListenableFuture<User> createUser();

CompletableFuture<BillingAccount> createBillingAccount(User user);

我需要在运行 createBillingAccount 之前运行 createUser(),因为它取决于创建的用户。

但是,我想返回用户,而不是billingAccount。

通常,我会使用Futures.transformAsync(createUser(),user -

在这里我还能做什么而不阻塞?


共有1个答案

缪远
2023-03-14

您可以简单地执行未来,然后执行thenApplyAsync并返回用户,这样您就返回了用户的未来,并丢弃计费,如下所示:

Futures.transformAsync(createUser(), user -> createBillingAccount(user).thenApplyAsync(b -> user))
 类似资料:
  • 我正在windows(7.3版)上安装gvim。启动后,我希望设置变量MYVIMRC,但它没有设置。有没有理由不设定。 有一个vimrc文件,因为许多设置与默认设置不同。 我用检查了MYVIMRC的值 gvim可执行文件位于c:\workarea\Vim\vim73中,c:\workare\Vim中的*\u vimrc*(在gvim启动时读取)。启动gvim后,我可以使用 对于版本:我发现系统vi

  • 虽然我的问题主题似乎是许多PDF操作包和工具都支持的特性,但我需要明确指出,我不想旋转PDF。 我有一个PDF,它显示了一个纵向(A4),尺寸为WxH 297x210(A4旋转)。 现在,我需要实现的是,这个PDF有横向方向,同时保留尺寸。 我不确定这需要我做什么。 如果我使用Adobe Illustrator将文档格式更改到所需的位置,我还需要旋转内容。如果我将此页面放入设计糟糕的PDF中,此页

  • 问题内容: 我正在查看基于我的代码库的Findbugs报告,并且触发的模式之一是空块(即)。该文件说: 空同步块比大多数人认识到的要微妙得多,难以正确使用,并且空同步块几乎从来没有比不那么人为的解决方案更好的解决方案。 就我而言,它的发生是因为该块的内容已被注释掉,但是该语句仍然存在。在什么情况下,空块可以实现正确的线程语义? 问题答案: 空的同步块将等待,直到没有其他人正在使用该同步器。那可能就

  • 我有一个未来链,它获取一个资源,使用它来检索一些数据,然后修改该数据并返回结果(仍然在未来)。 我希望在返回未来链之前释放资源,但不必插入更接近的样板代码(即,将中间结果放入某个变量中,然后将其作为链其余部分的结果返回)。 我在找这样的东西:

  • 问题内容: 我正在使用使用react-native- firebase 的应用程序。我已经在travis上建立了CI构建,目的是拥有可复制的构建,并且突然停止了工作,如下所示: 之前:4天前,构建成功 after:今天,完全相同的构建被破坏,失败并显示以下消息: Android依赖项“ com.google.android.gms:play-services- base”对于编译(16.0.1)和

  • 我的A类是: 另一类B为: 如果我将类A的方法sayHello(int,int)的返回类型从int改为float,它会显示一个错误,因为根据覆盖规则,返回类型也被认为是无效的覆盖和重载。 我不明白为什么java不允许更改返回类型。为什么返回类型也需要相同