List<Long> aids = episodes.stream().map(Episode::getAid).collect(Collectors.toList());
List<List<Long>> partition = Lists.partition(aids, 20);
List<CompletableFuture<List<ArchiveDataDetail>>> collectopadrFutures = partition.stream().map(x ->
CompletableFuture.supplyAsync(() -> x.stream().map(z -> {
ArchiveDataDetail archiveDataDetail = httpClientApiHelp.getArchiveDataStatNotIncludeRate(bvid);
return archiveDataDetail;
}).collect(Collectors.toList()), ThreadPoolsUtils.getInstance().getStatSeasonPool()).exceptionally(e -> {
log.warn("获取课时数据信息异1", e);
return null;
})
).collect(Collectors.toList());
CompletableFuture<Void> opadrFutureAllOf = CompletableFuture.allOf(collectopadrFutures.toArray(new CompletableFuture[collect.size()]));
CompletableFuture<List<List<ArchiveDataDetail>>> listAddRFuture = opadrFutureAllOf.thenApply(x -> collectopadrFutures.stream().map(CompletableFuture::join).collect(Collectors.toList()));
DurationAndShareDato durationAndShareDato = listAddRFuture.thenApply(x -> {
long totalShare = x.stream().flatMap(Collection::stream).filter(Objects::nonNull).mapToLong(ArchiveDataDetail::getShare).sum();
long totalDuration = x.stream().flatMap(Collection::stream).filter(Objects::nonNull).mapToLong(ArchiveDataDetail::getDuration).sum();
return DurationAndShareDato.builder()
.totalDuration(totalDuration)
.totalShare(totalShare)
.build();
}
).get();
这是多线程调用http接口