Java 8 在if状态下的完整未来

Java 8 在if状态下的完整未来,java-8,completable-future,Java 8,Completable Future,我有2个完整的期货和3个方法,必须一个接一个地出现。 然而,在某些情况下,第二种方法是不必要的 CompletableFuture<Boolean> cf1 = supplyASync.(() ->( doSomething1())); CompletableFuture<Boolean> cf2 = new CompletableFuture<Boolean>(); if(someThing){

我有2个完整的期货和3个方法,必须一个接一个地出现。 然而,在某些情况下,第二种方法是不必要的

        CompletableFuture<Boolean> cf1 = supplyASync.(() ->( doSomething1()));

        CompletableFuture<Boolean> cf2 = new CompletableFuture<Boolean>();
        if(someThing){
            cf2 = cf1.thenApplyAsync(previousResult -> doSomething2()); 
        }
        else{
            cf2 = cf1;
        }

        if (SomeThing2) {       
            cf2.thenApplyAsync(previousResult ->doSomeThing3());

        }
CompletableFuture cf1=supplyASync.(()->(doSomething1());
CompletableFuture cf2=新的CompletableFuture();
如果(某物){
cf2=cf1.然后应用同步(先前的结果->doSomething2());
}
否则{
cf2=cf1;
}
如果(某物2){
然后应用同步(先前的结果->doSomeThing3());
}
基本上,我想做的是doSomething2将在doSomething1之后运行(如果需要),但无论如何,doSomeThing3将在第一个或两个之后执行

  • 这样做对吗?还是有更好的办法

  • 代码是按顺序执行的,即首先是可完成的未来1,然后是可完成的未来2(如果适用),最后是任务3

    因此,您可以使用单一的CompletableFuture:

    CompletableFuture<Boolean> cf = CompletableFuture.supplyAsync(() -> {
        if (doSomething1()) {
            doSomething2();
        }
        doSomething3();
        // return something
    });
    
    CompletableFuture cf=CompletableFuture.supplyAsync(()->{
    if(doSomething1()){
    doSomething2();
    }
    doSomething3();
    //归还某物
    });
    
    处理布尔结果的方法如下:

    CompletableFuture<Boolean> cf = CompletableFuture.supplyAsync(() -> {
        boolean result;
        if (result = doSomething1()) {
            result = doSomething2();
        }
        return result && doSomething3();
    });
    // handle future as you need, e.g. cf.get() to wait the future to end (after task 3)
    
    CompletableFuture cf=CompletableFuture.supplyAsync(()->{
    布尔结果;
    如果(结果=doSomething1()){
    结果=doSomething2();
    }
    返回结果&doSomething3();
    });
    //根据需要处理未来,例如cf.get()等待未来结束(在任务3之后)
    
    如果按顺序执行,为什么需要3个期货?我只有2个期货。我需要等待两个任务的完成,才能执行第三个任务@Josedasilvay你可以在一个未来使用所有东西,然后随心所欲地处理未来。明白了。谢谢-