2016-07-29 4 views
1

私は最近、集計演算をトラバースすることは、for-eachコンストラクトやIteratorよりも優れた選択肢であることを知っていますが、私はその方法を理解しませんでした。 ストリームを取得して集約操作を実行する利点は何ですか。 シンセックスのパフォーマンス上の問題やシンプルさはありますか?コレクションをトラバースするには、集計操作をどのように行うのが良いでしょうか?

+1

ストリームを聞いているように見えるので、Java-8タグを追加しました。 –

+2

plain for-eachを使用してマルチスレッド集約操作を実行しようとすると、どれほど難しいかがわかります。リストはスレッドセーフではないので、たくさんのものなどを同期させる必要があります。ストリームを使って同じことを達成するには、並列ストリームを使うだけで、ずっと簡単で安全です。多くの時間を節約します。また、ストリームは「どのように」という部分に「どのように」なるのかということに焦点を当てます。繰り返しは、あなたのために内部的に行われます。 – george

+4

主な利点は、パフォーマンス(パフォーマンスが良いとは思えない)でも構文の単純さ(しかし、これも利点かもしれません)です。利点は、データセットのプロパティとして、より高いレベルの抽象化で操作を_表現することです。個々の要素を掘り下げ、何らかの臨時の結果を計算する命令的なプロセスです。 –

答えて

1

集計オペレーションとイテレータ(またはfor-eachループ)の主な違いの1つは、内部反復を使用することです。 Oracleのドキュメントが言うように:

「外部反復のみコレクションの要素を反復処理することができます 順次内部反復は、この制限はありませんそれは は、より簡単に並列コンピューティングを活用することができます。」。参照:https://docs.oracle.com/javase/tutorial/collections/streams/index.html#differences

関連する問題