我正在使用Async Http Client 库(使用 Netty)向 RESTful API 发出异步 Http Get 请求。由于我想保留非阻塞行为,因此我将返回实例CompletableFuture<T>
作为 Http Get 请求的结果。所以,当一个 RESTful API 端点返回一个 Json 数组时,我返回一个CompletableFuture<T[]>
.
然而,根据 Erik Meijer 对编程中的四个基本效果所做的分类,我认为这Stream<T>
更适合发出异步 Http Get 请求并返回 Json 数组的 Java 方法的结果。在这种情况下,我们可以将Stream<T>
视为Observable<T>
等价物,它是返回许多值的异步计算的结果。
因此,考虑到resp
保持响应,那么我可以得到CompletableFuture<Stream<T>>
如下结果:
CompletableFuture<T[]> resp = …
return resp.thenApply(Arrays::stream);
但是,我想知道如何在不等待计算完成的情况下将其转换CompletableFuture<Stream<T>> resp
为 a Stream<T>
(即我不想阻止get()
调用)?
我希望得到与以下表达式相同的结果,但不阻塞get()
:
return resp.thenApply(Arrays::stream).get();