1

APIリファレンスには次のように書かれています。

ストリームは、順次および並列の集計操作をサポートする要素のシーケンスです

それから、

この例では、ウィジェットはコレクションです。Collection.stream() を介して Widget オブジェクトのストリームを作成し、それをフィルタリングして赤いウィジェットのみを含むストリームを生成し、それを各赤いウィジェットの重みを表す int 値のストリームに変換します。次に、このストリームが合計されて総重量が生成されます。

再びJavaチュートリアルから

ストリームは一連の要素です。コレクションとは異なり、要素を格納するデータ構造ではありません

では、ストリームには要素が含まれていますか、含まれていませんか?

4

1 に答える 1

1

ストリームは、データの論理編成を定義します。ストリームは、メモリに格納されたデータという意味で要素を「含む」場合と含まない場合があります (物理的な編成)。それらは代わりに遅延計算され、無限のサイズが可能になります。

コレクションは、データの論理編成も定義します。コレクションも遅延計算される場合があります。の結果を計算するList<T>をラップする実装を作成できます。そのようなリストは突然変異を禁止します。(単一リンクリストをプリミティブデータ構造として使用する関数型言語では、配列は関数として表現されることがあります。この-from-function パターンは、逆の操作と見なすことができます。) 同様に、 aは不変の と見なすことができます。Infiniteは範囲が有限であるため少し扱いに​​くいため、リストの限られた範囲にしかアクセスできませんが、可能です。Function<Integer, T>List.get(int)ListFunction<K, V>Map<K, V>Listintget(int)

したがって、データ (リスト、マップ、ストリーム) の論理編成は、物理レイアウト (配列またはツリーに格納されるか、関数から遅延計算される) とほとんど直交しています。これが、コレクションとストリームの両方の抽象化のポイントです。

于 2014-06-18T17:40:48.410 に答える