誰か教えてくださいStream
の中間操作と端末操作の違いは何ですか?中間操作と端末操作の違いは何ですか?
Stream
ストリームを処理するためにパイプラインに結合されます。すべての操作は中間または終端のいずれかです。
誰か教えてくださいStream
の中間操作と端末操作の違いは何ですか?中間操作と端末操作の違いは何ですか?
Stream
ストリームを処理するためにパイプラインに結合されます。すべての操作は中間または終端のいずれかです。
ストリームはいくつかの操作をサポートしており、これらの操作はintermediate
とterminal
操作に分かれています。
この操作の違いは、端末操作が遅延している間に中間操作が遅延していることです。ストリーム上で中間操作を呼び出すと、操作はすぐに実行されません。この操作は、そのストリームで端末操作が呼び出された場合にのみ実行されます。ある意味では、中間操作が記憶され、端末操作が呼び出されるとすぐに呼び出されます。複数の中間操作を連鎖させることができ、いずれも端末操作を呼び出すまでは何も行いません。そのとき、以前に呼び出されたすべての中間操作が、端末操作とともに呼び出されます。
すべての中間操作は、ストリーム操作(連鎖可能)を返しますが、端末操作は返しません。中間動作は次のとおり
filter(Predicate<T>)
map(Function<T>)
flatmap(Function<T>)
sorted(Comparator<T>)
peek(Consumer<T>)
distinct()
limit(long n)
skip(long n)
ターミナル操作は、プリミティブ値、コレクション又は全く値として非ストリーム(連鎖することができない)結果を生成します。
ターミナルの操作は以下のとおりです。
forEach
toArray
reduce
collect
min
max
count
anyMatch
allMatch
noneMatch
findFirst
findAny
最終5短絡端末操作です。
'limit()'と 'skip() int ' – Lino
あなたはそうです。ただ私の答えを更新しました。ありがとう@Lino! –
ありがとう.. @AlexMamoあなたの説明はかなりきれいです.. –
リストのストリームを収集する、または値のストリームを集めるなどの処理を終了する端末の意味。
新しい状態への移行のように中間は、端末操作への道
にあなたはおそらく、あなたがストリームを定義するとき、メソッドがちょうど全体のストリーム上の一つ一つと呼ばれていないことに気づいたが、むしろ彼らはストリームから各要素に対して何かを行います。これらのストリームを並列に実行できるようにするには、すべての要素に対して基本的にパイプライン全体があります。
複数のパイプラインを作成するために、Java 8以降ではbuilder patternが使用されています。すべての中間ステップで、フィルタまたはコンバータをスタックに追加します。そのスタックからパイプラインを生成するようにJavaに指示するには、終了手順を使用します。最後のステップは、すべての異なるパイプラインを組み合わせることです。通常は、定義された形式で値を返します。リストを作成することもできますが、要素ごとに関数を1回実行したり、結果をブール値または数値に減らすこともできます。
ストリームは、ターミナル操作がsum、toarrayなどのように呼び出され、フィルタが実際に動作するときに実際に何かを行います。マップは中間であり、恐らく二重です。 –