如何一起使用 completablefuture 和 Streams

How to use completablefuture and Streams together

我想同时与 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. CompletableFuture<T> 转换为 CompletableFuture<R>
  2. Stream<String> 转换为 Stream<Team>

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

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

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

s 是被转换为 Stream<Team>Stream<String> - 这两种类型之间没有神奇的转换