in src/main/java/com/spotify/futures/CompletableFutures.java [629:642]
public static <R, A, B, C> CompletionStage<R> combineFutures(
CompletionStage<A> a,
CompletionStage<B> b,
CompletionStage<C> c,
Function3<A, B, C, CompletionStage<R>> function) {
final CompletableFuture<A> af = a.toCompletableFuture();
final CompletableFuture<B> bf = b.toCompletableFuture();
final CompletableFuture<C> cf = c.toCompletableFuture();
return CompletableFuture.allOf(af, bf, cf)
.thenCompose(ignored -> function.apply(af.join(),
bf.join(),
cf.join()));
}