Java IntStream迭代vs生成何时使用什么?


19

似乎IntStream.iterate只是的轻量级订购版本IntStream.generate。是真的吗 如果没有,核心区别是什么?

Answers:


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)

Iterate明确给出了起始值作为参数和一元运算符,该运算符用于从上一个生成下一个值。在这里,运算符可以很容易地在没有内部状态的情况下保持不变,并且可以在多个地方并行重用而不会出现任何问题。

生成用途供应商。那些可以提供常数或随机数,或者需要具有内部状态以提供类似(1、2、3,...)的序列。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.