ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用Java 8 CompletableFuture替换Futures.successfulAsList吗?

2019-10-26 04:03:18  阅读:247  来源: 互联网

标签:completable-future java-8 asynchronous guava java


我正在寻找用Java 8的CompletableFuture代码替换Guava的Futures.successfulAsList()的规范代码.

我认为CompletableFuture.allOf()似乎是Futures.allAsList()的替代品,但是我看不到任何类似于successAsList()的东西.

解决方法:

实际上,CompletableFuture.allOf(…)比allAsList()更接近successAsList().

实际上,allOf()仅在所有给定的期货都完成后才完成,无论是带有值还是异常.然后,您可以检查每个将来以检查其完成情况(例如,在随后的thenAccept()/ thenApply()中).

allAsList()在CompletableFuture中没有非常接近的等效项,因为一旦任何输入Future失败,它都应该失败.但是,您可以结合使用allOf()来实现它,并将每个输入的future与一个exception()链接起来,这将使allOf()返回的future立即失败:

CompletableFuture<String> a = …, b = …, c = …;
CompletableFuture<Void> allWithFailFast = CompletableFuture.allOf(a, b, c);
Stream.of(a, b, c)
    .forEach(f -> f.exceptionally(e -> {
        allWithFailFast.completeExceptionally(e);
        return null;
    }));

标签:completable-future,java-8,asynchronous,guava,java
来源: https://codeday.me/bug/20191026/1933764.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有