如何同时使用completablefuture和Streams

时间:2019-07-01 16:40:25

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

我想同时使用CompletableFutureStream。类似于将CompletableFuture<Stream<String>>转换为CompletableFuture<Stream<Team>>

CompletableFuture<String>CompletableFuture<Integer>,我做过类似的事情。

CompletableFuture<Stream<String>> getMostPopularTeamNames(int maxResults) {
    CompletableFuture<Stream<String>> mostPopularTeamNames;

    WorldCupSocialApi.getMostPopularTeamNames(1, maxResults, teams -> {
        mostPopularTeamNames = CompletableFuture.supplyAsync(() -> teams.stream());
    });

    return mostPopularTeamNames;
}

我正在尝试做类似的事情:

CompletableFuture<Stream<Team>> cf = getMostPopularTeamNames(5).thenApply(s -> {
    s.map(name -> new Team(name))
}

但是我不确定sString还是Stream,是否能以这种方式映射...

1 个答案:

答案 0 :(得分:3)

因此,让我们将问题分解为两个较小的问题:

  1. CompletableFuture<T>转换为CompletableFuture<R>
  2. Stream<String>转换为Stream<Team>

第一个可以使用thenApplythenApplyAsync来实现。 第二个可以使用对map实例的标准Stream操作来实现。

现在,一旦您尝试将它们组合起来,就可以像应用CompletableFuture<String>的任何其他转换一样进行思考,现在应该可以简单地进行以下操作了:

CompletableFuture<Stream<Team>> cf = getMostPopularTeamNames(5)
  .thenApply(s -> s.map(name -> new Team(name));

s是一个Stream<String>,可以转换为Stream<Team>-这两种类型之间没有神奇的转换