68190


現在Java8のcompletablefutureを勉強しています。

表題にある通りなのですが、  
**completablefutureにおいてthencomposeのメソッドチェーンを途中で抜ける方法はありますでしょうか？**

例えば以下のようなコードにおいて以下のような方法はありますでしょうか？  
後者に関しては意図的にExceptionを投げる方法だけでしょうか？  
Exceptionを投げるにしても意図的に投げるとしたらどのようなExceptionを投げるべきでしょうか？  
・①のthenComposeで処理を終える方法  
・①のthenComposeから②のexceptionallyに飛ぶ方法

[code]

    public class CompletableFutureTest {
    
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        CompletableFuture<String> future = CompletableFuture.completedFuture("aaaaa");
        future = future.thenCompose(s -> CompletableFuture.completedFuture("bbb"))
                .thenCompose(f -> CompletableFuture.completedFuture("ccc"))  //①
                .thenCompose(f -> CompletableFuture.completedFuture(1111))
                .thenCompose(f -> CompletableFuture.completedFuture("ffff"))
                .thenApply(s -> CompletableFuture.completedFuture("ffff"))
                .thenCompose(f -> CompletableFuture.completedFuture("ffff"))
                .exceptionally(s -> "ffff");  //②
    
        System.out.println(future.get());
    }
    }
    
[/code]

もしわかる方がいればお願い致します。


CC BY-SA 4.0
2020-06-26T10:31:20.640
68030
2020-07-01T13:50:29.970
40231
question
java java8
completablefutureにおいてthencomposeのメソッドチェーンを途中で抜ける方法があるか知りたい

[code]

        boolean isThrowException = true;
        CompletableFuture<String> future = CompletableFuture.completedFuture("aaaaa");
        future = future.thenCompose(s -> CompletableFuture.completedFuture("bbb"))
                .thenCompose(f -> {
                    if(isThrowException) {
                        throw new RuntimeException("Its a Exception");
                    }
                    return CompletableFuture.completedFuture("ccc");
                })  //①
                .thenCompose(f -> CompletableFuture.completedFuture(1111))
                .thenCompose(f -> CompletableFuture.completedFuture("ffff"))
                .thenApply(s -> CompletableFuture.completedFuture("ffff"))
                .thenCompose(f -> CompletableFuture.completedFuture("ffff"))
                .exceptionally(s -> s.getMessage());  //②
    
        System.out.println(future.get());
    
[/code]

これはどうでしょうか？


CC BY-SA 4.0
2020-07-01T13:50:29.970
68190
2020-07-01T13:50:29.970
40887
68030
answer