Guava CheckedFuture<X,Y> 映射到 CheckedFuture <Z,Y> 无阻塞

Guava CheckedFuture<X,Y> map to CheckedFuture <Z,Y> without blocking

我最近遇到了 Guava 及其异步 Future API。

我有一个方法的声明与下面的类似:

CheckedFuture<X, Y> update(final X entry)

在某些时候可能会调用具有以下签名的方法:

CheckedFuture<Boolean, Y> delete(final X entry)

我一直在寻找但没有找到的方法是将对 delete 的调用结果映射到 CheckedFuture<X, Y>,这是 return 类型update.

有没有人能够通过调用 delete(entry).checkedGet() 在不阻塞整个计算的情况下做到这一点?

感谢任何帮助。

注意: 我知道 Guava javadocs 建议避免使用 CheckedFutures,但 atm 这就是 API 的构建方式,重建它是不切实际的(不是意思我不期待它!:)

您可以使用Futures#transform

CheckedFuture<X, Y> update(final X entry) {
    CheckedFuture<Boolean, Y> f = delete(entry);
    ListenableFuture<X> tr = Futures.transform(f, (Function<Boolean, X>) input -> entry);
    return Futures.makeChecked(tr, input -> (Y) input.getCause());
}

CheckedFuture<Boolean, Y> delete(final X entry) {
    return Futures.immediateFailedCheckedFuture(new Y());
}