CompletableFuture.allOf(…) is actually closer to successfulAsList() than allAsList().
Indeed, allOf() only completes after all the given futures have completed, be it with a value or an exception. You can then inspect each future to check how it completed (e.g. in a following thenAccept()/thenApply()).
allAsList() does not have a close equivalent in CompletableFuture because it should fail as soon as any of the input futures fails. However, you could implement it with a combination of allOf() and chaining each input future with an exceptionally() that would make the future returned by allOf() immediately fail:
CompletableFuture<String> a = …, b = …, c = …;
CompletableFuture<Void> allWithFailFast = CompletableFuture.allOf(a, b, c);
Stream.of(a, b, c)
.forEach(f -> f.exceptionally(e -> {
allWithFailFast.completeExceptionally(e);
return null;
}));