私は、Javaのドキュメントを読み、this sentenceを発生しました:Javaストリームで「エスケープハッチ操作」とは何ですか?
エスケープハッチ操作
iterator()
とspliterator()
を除き、実行は端末操作が呼び出されたときに始まり、および端末操作が完了したときに終了します。
「エスケープ・ハッチ操作」とは何かわかりません。誰かがこの言葉を説明できますか?
私は、Javaのドキュメントを読み、this sentenceを発生しました:Javaストリームで「エスケープハッチ操作」とは何ですか?
エスケープハッチ操作
iterator()
とspliterator()
を除き、実行は端末操作が呼び出されたときに始まり、および端末操作が完了したときに終了します。
「エスケープ・ハッチ操作」とは何かわかりません。誰かがこの言葉を説明できますか?
stream
パッケージのjavadocから:ほとんどすべてのケースで
、ターミナル事業は が戻る前に、パイプラインのデータソースと処理のその トラバーサルを完了し、熱望しています。端末操作
iterator()
およびspliterator()
のみがそうではありません。既存の 操作ではタスクが十分でない場合に、任意の がクライアント制御のパイプライントラバーサルを有効にするための「エスケープハッチ」として提供されます。なく、iterator()
とspliterator()
の場合の端末操作返すとき、ほとんどの場合、ストリームトラバースが完了したことを意味
:これらの端末操作Iterator
又はSpliterator
のいずれかを使用して返されるが、パイプラインは依然として「オープン」であり、要素がイテレータを介して要求されると処理されます。ストリーム上の操作は次の要素が要求された場合にのみ実行されるため、このようにストリーム処理は遅延になります。 iterator()
メソッドが呼び出された後
Iterator<Person> iterator = persons
.stream()
.filter(p -> !p.getName().equals("Mike Tyson"))
.iterator();
、ストリームは、「終了」されています。あなたはより多くのメソッドをチェーンすることはできません。しかし、返されたイテレータのメソッドnext()
を呼び出すことで、ストリームの要素にアクセスすることができ、ストリームは最初にこれを行うときにのみ処理が開始されます。これは、iterator()
またはspliterator()
端末操作が使用されている場合にのみ当てはまります。