輸入はjava.util.List; 輸入java.util.concurrent.CompletableFuture。 輸入java.util.concurrent.TimeUnit。 輸入java.util.stream.Collectors。 輸入java.util.stream.Stream。 パブリック クラスメイン{ 静的 CompletableFuture <リスト<>> ALLOF(CompletableFuture <>??... CFS){ 返すCompletableFuture.allOf(CFS) .thenApply(無視 - > Stream.of(CFS) .MAP(CF - > CF .join()) .collect(Collectors.toList()))。 } パブリック 静的 ボイドメイン(文字列[]引数){ //我々はCompletableFuturesの3(または任意の数)を有する CompletableFuture <string>をCF1 = CompletableFuture.supplyAsync(() - > {睡眠(1); リターン " ハロー" ;}); CompletableFuture <整数> CF 2 = CompletableFuture.supplyAsync(() - > {睡眠(1); 返す 10 ;}); CompletableFuture <ダブル> CF 3 = CompletableFuture.supplyAsync(() - > {睡眠は(1); 戻り20D;}); CompletableFuture <リスト<>> ALLOF = ALLOF(CF1、CF2、CF3);?// 私たちはすぐ上に作成メソッドを呼び出す //を我々はそこ-alreadyを得ることができます-結果のいずれか、次に使用して // 使用して結果取得: allOf.thenAccept(。L - > l.forEach(システムアウト::のprintlnを)); // またはCompletableFuture.joinを使用して()(またはCompletableFuture.get()) // OR(非タイプセーフ) 文字列S =(文字列)allOf.join()。取得(0 ); 整数I =(整数)allOf.join()。取得(1 ); ダブルD =(ダブル)allOf.join()。取得(2 ); システム。アウト .println(S + " "+ I + " " + D)。 睡眠(2)。// デフォルトCompletableFutureエグゼキュータがデーモンスレッドベースのエグゼキュータですので } プライベート静的ボイド睡眠(int型秒){ しようと{ TimeUnit.SECONDS.sleep(秒)。 } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } } }
抜粋住所:http://m-hewedy.blogspot.com/2017/02/completablefutureallof-that-doenst.html