26

それらの間のすべての類似点と相違点は何ですか。Java Parallel Stream には RXJava で利用可能な要素がいくつかあるようです。そうですか?

4

3 に答える 3

41

Rx は、観測可能なシーケンスを作成および処理するための API です。Streams API は反復可能なシーケンスを処理するためのものです。Rx シーケンスはプッシュベースです。要素が利用可能になると通知されます。Stream はプルベースです。処理するアイテムを「要求」します。どちらも同様の演算子/変換をサポートしているため、似ているように見えるかもしれませんが、仕組みは基本的に互いに正反対です。

于 2014-05-01T14:22:10.403 に答える
1

ストリームはプル ベースです。個人的には、C# IEnumerable<>、LINQ、およびそれらに関連する拡張メソッドに対する Oracle の回答だと思います。

RxJava はプッシュ ベースですが、.NET のリアクティブ拡張機能が最初にリリースされたのか、Rx プロジェクトが最初に公開されたのかはわかりません。

概念的にはまったく異なり、アプリケーションも異なります。

すべてをロードしてメモリに収まらないほど大きいテキスト ファイルにテキスト検索プログラムを実装している場合は、Stream を使用することをお勧めします。イテレータ、および行ごとにスキャンします。

Stream のもう 1 つのアプリケーションは、データのコレクションに対する並列計算です。現在、すべてのマシンは複数のコアを備えていますが、クライアント マシンで使用できるコアの数を正確に知ることは容易ではありません。動作するスレッドの数を事前に構成するのは難しいでしょう。したがって、並列ストリームを使用し、JVM にそれを判断させます (より最適であると思われます)。

一方、ユーザー入力文字列を受け取り、Web で利用可能なビデオを検索するプログラムを実装している場合は、プログラムがいつ結果を取得し始めるか (またはエラーを受け取るか) がわからないため、RX を使用します。のネットワーク タイムアウト)。プログラムをレスポンシブにするには、プログラムがネットワークの更新と完全なシグナルを「購読」できるようにする必要があります。

Rx のもう 1 つの一般的なアプリケーションは、ユーザーがボタンをクリックして確認する必要なしに、「ユーザーが終了した入力を検出する」ための GUI です。たとえば、ユーザーが入力を止めるたびにテキスト フィールドが必要な場合は、[検索ボタン] をクリックするのを待たずに検索を開始します。この場合、Rx を使用して "KeyEvent" と "throttle" (たとえば 500 ミリ秒) でオブザーバブルを作成し、500 ミリ秒入力を停止すると、"検索を開始" する onNext() を受け取ります。

于 2016-10-31T16:16:30.943 に答える