Async Http Client ライブラリ(Nettyを使用) を使用して、RESTful API への非同期 Http Get リクエストを作成しています。非ブロッキング動作を維持したいのでCompletableFuture<T>
、Http Get リクエストの結果として のインスタンスを返します。したがって、RESTful API エンドポイントが Json 配列を返す場合、私はCompletableFuture<T[]>
.
それでも、Erik Meijer によるThe Four Essential Effects In Programmingに関する分類によれば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
ただし、計算が完了するのを待たずに を に変換するにはどうすればよいでしょうか(つまり、呼び出しStream<T>
時にブロックしたくありません)。get()
私は次の式と同じ結果を得たいと思っていますが、 on をブロックすることはありませんget()
:
return resp.thenApply(Arrays::stream).get();