我有一些使用CompletableFuture
运行异步的流,例如:
foo(...)
.thenAccept(aaa -> {
if (aaa == null) {
break!
}
else {
...
}
})
.thenApply(aaa -> {
...
})
.thenApply(...
因此,如果我的foo()
返回null
(将来)我需要很快打破,否则,流程会继续。
现在我必须在每个未来的街区一直检查null
;但这很难看。
这可以通过CompletableFuture
吗?
使用CompletableFuture
,您可以定义一个接一个地执行的异步任务流。例如,您可以说:
做A,当A完成时,做B,然后做C ......
我的问题是打破这种流动并说:
执行A,但如果结果为null break;否则做B,然后做C ......
这就是我打破流量的意思。
答案 0 :(得分:4)
您的问题很一般,所以答案可能并不完全适用于您。解决这个问题的方法有很多种,可能适用于不同的情况。
在评估CompletableFuture
时创建分支的一种方法是使用.thenCompose
:
foo().thenCompose(x -> x == null
? completedFuture(null)
: completedFuture(x)
.then.....(...)
.then.....(...)
).join();