我想同时使用CompletableFuture
和Stream
。类似于将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))
}
但是我不确定s
是String
还是Stream
,是否能以这种方式映射...
答案 0 :(得分:3)
因此,让我们将问题分解为两个较小的问题:
CompletableFuture<T>
转换为CompletableFuture<R>
Stream<String>
转换为Stream<Team>
第一个可以使用thenApply
或thenApplyAsync
来实现。
第二个可以使用对map
实例的标准Stream
操作来实现。
现在,一旦您尝试将它们组合起来,就可以像应用CompletableFuture<String>
的任何其他转换一样进行思考,现在应该可以简单地进行以下操作了:
CompletableFuture<Stream<Team>> cf = getMostPopularTeamNames(5)
.thenApply(s -> s.map(name -> new Team(name));
s
是一个Stream<String>
,可以转换为Stream<Team>
-这两种类型之间没有神奇的转换