Guava的Future类,它的Futures帮助类供给了很多便利办法,用来处理多个Future,而不像Java的CompletableFuture,只供给了allOf、anyOf两个办法。 比如有如许一个需求,将多个CompletableFuture组合成一个CompletableFuture,这个组合后的CompletableFuture的计算结不雅是个List,它包含前面所有的CompletableFuture的计算结不雅,guava的Futures.allAsList可以实现如许的功能,然则对于java CompletableFuture,我们须要一些帮助办法:
- public static <T> CompletableFuture<List<T>> sequence(List<CompletableFuture<T>> futures) {
- CompletableFuture<Void> allDoneFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
- return allDoneFuture.thenApply(v -> futures.stream().map(CompletableFuture::join).collect(Collectors.<T>toList()));
- }
- public static <T> CompletableFuture<Stream<T>> sequence(Stream<CompletableFuture<T>> futures) {
- List<CompletableFuture<T>> futureList = futures.filter(f -> f != null).collect(Collectors.toList());
- return sequence(futureList);
- }
或者Java Future转CompletableFuture:
应用例子如下:
- public static <T> CompletableFuture<T> toCompletable(Future<T> future, Executor executor) {
- return CompletableFuture.supplyAsync(() -> {
- try {
- return future.get();
- } catch (InterruptedException | ExecutionException e) {
- throw new RuntimeException(e);
- }
- }, executor);
- }
【编辑推荐】

网友点评
精彩导读
科技快报
品牌展示