6

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();
4

2 に答える 2