java - 如何一起使用 completablefuture 和 Streams
问题描述
我想同时CompletableFuture
工作Stream
。类似于将 aCompletableFuture<Stream<String>>
转换为CompletableFuture<Stream<Team>>
.
我从CompletableFuture<String>
to做了类似的事情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))
}
但我不确定我s
是否会成为String
或Stream
,如果我可以那样映射它......
解决方案
因此,让我们将问题分解为两个较小的问题:
- 转换
CompletableFuture<T>
为CompletableFuture<R>
- 将 a
Stream<String>
转换为Stream<Team>
第一个可以使用thenApply
or来实现thenApplyAsync
。第二个可以使用实例map
上的标准操作来实现。Stream
现在,一旦您尝试将它们结合起来,就像应用 的任何其他转换一样考虑CompletableFuture<String>
,现在应该很清楚您可以简单地执行以下操作:
CompletableFuture<Stream<Team>> cf = getMostPopularTeamNames(5)
.thenApply(s -> s.map(name -> new Team(name));
s
是一个Stream<String>
被转换成Stream<Team>
的 - 这两种类型之间没有神奇的转换