کلاس CompletableFuture در جاوا ۸ معرفی شده و متد join آن شبیه متد get در کلاس Future است با این تفاوت که هیچ checked exception ی پرتاب نمی کند. کاربرد عملی متد join زمانی است که شما تعدادی شئ از نوع CompletableFuture در یک stream دارید که می خواهید پس از اتمام تمام آنها، نتایج با هم join شوند و در قالب یک stream از جنس value درون CompletableFuture تبدیل شود. در مثال زیر متد getPrice از کلاس Shop نوع Future بر می گرداند و برای اینکه سیستم block نشود ابتدا تمام قیمت ها به نوع CompletableFuture تبدیل می شوند و در نهایت نتایج آنها با متد join در قالب یک لیست از String جمع می شود.
List<Shop> shops; //= ...
List<CompletableFuture<String>> priceFutures =
shops.stream()
.map(shop -> CompletableFuture.supplyAsync(
() -> shop.getName() + shop.getPrice(product),executor))
.collect(toList());
return priceFutures.stream().map(CompletableFuture::join).collect(toList());