in src/main/java/com/spotify/futures/CompletableFutures.java [471:481]
public static <R, A, B, C, D> CompletionStage<R> combine(
CompletionStage<A> a, CompletionStage<B> b, CompletionStage<C> c, CompletionStage<D> d,
Function4<A, B, C, D, R> function) {
final CompletableFuture<A> af = a.toCompletableFuture();
final CompletableFuture<B> bf = b.toCompletableFuture();
final CompletableFuture<C> cf = c.toCompletableFuture();
final CompletableFuture<D> df = d.toCompletableFuture();
return CompletableFuture.allOf(af, bf, cf, df)
.thenApply(ignored -> function.apply(af.join(), bf.join(), cf.join(), df.join()));
}