Невозможно вызвать join
для каждого CompletableFuture
, но вы можете использовать CompletableFuture.allOf
, чтобы запланировать выполнение этого действия, когда все фьючерсы будут завершены, поэтому никакой вызов join
не заблокирует поток. Затем используйте Stream API для выполнения массовой операции:
Map<String, CompletableFuture<Response>> map = …
CompletableFuture<Map<String, Response>> f =
CompletableFuture.allOf(map.values().toArray(new CompletableFuture[0]))
.thenApply(_void -> map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().join())));