Java IntStreamは、何をいつ使用するかを繰り返し生成しますか?


19

IntStream.iterate軽量注文版のようですIntStream.generate。本当ですか?そうでない場合、主な違いは何ですか?

回答:


21

署名が異なることに注意してください。

  • generateはを受け取りIntSupplierます。つまり、何も与えられずにintを生成することになっています。使用例には、同じ整数の定数ストリームの作成、ランダムな整数のストリームの作成が含まれます。ストリームの各要素が前の要素に依存していないことに注意してください。

  • iterateはa seedとaを取りIntUnaryOperatorます。つまり、前の要素に基づいて各要素生成することになります。これは、帰納的に定義されたシーケンスを作成する場合などに役立ちます。この場合、各要素は前の要素に依存することになっています


繰り返しのユースケース-状態を保存する必要がある場合-これがコアの違いです。状態を別の場所に保存する必要を生成します。そして、Iterateは順序付けられていますが、generateは順序付けされていませんが、並列処理には有効です
JJ Beam

8
  1. IntStream.iterate返す注文IntStream一方の上IntStream.generateに戻り順不同IntStream並列ストリームパイプラインのスピードアップに役立つことができました。

  2. IntStream.generate Javadocで指定されているように、ランダムな値または定数値を生成することが推奨されますが、返されるストリームの特性が最も可能性が高いと思います。


5

注文以外は使い方も少し異なります。メソッドのシグネチャを見てみましょう:

  • iterate(int seed, IntUnaryOperator f)
  • generate(IntSupplier s)

反復は、開始値をパラメーターとして明示的に指定し、前の値から次の値を生成するために使用される単項演算子を使用します。ここで、演算子は内部状態なしで簡単に不変にすることができ、問題なく複数の場所で並行して再利用できます。

生成使用サプライヤー。これらは、定数または乱数を提供するか、(1、2、3、...)のような系列を提供するための内部状態が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.