Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 流方法在内部进行循环?_Java_Loops_Java Stream - Fatal编程技术网

Java 流方法在内部进行循环?

Java 流方法在内部进行循环?,java,loops,java-stream,Java,Loops,Java Stream,我正在研究Java的streams API,从我看到的情况来看,强烈建议我使用几种方法来使用流更改集合,此外,使用此API我停止使用循环非常好,但我想知道,流的每个方法都不执行必要的循环替代?对于我使用的需要良好性能的应用程序来说,它最终是否会对其性能造成不利影响?在许多情况下,我可以在一个循环中对集合进行多个必要的修改 但我也想象JDK和JVM的开发人员也会执行他们的黑魔法来防止这种情况。如果是这样的话,这个魔术的细节是什么?流API中的每个方法都不会创建新的循环。。。它将方法组合起来,并在遇

我正在研究Java的streams API,从我看到的情况来看,强烈建议我使用几种方法来使用流更改集合,此外,使用此API我停止使用循环非常好,但我想知道,流的每个方法都不执行必要的循环替代?对于我使用的需要良好性能的应用程序来说,它最终是否会对其性能造成不利影响?在许多情况下,我可以在一个循环中对集合进行多个必要的修改


但我也想象JDK和JVM的开发人员也会执行他们的黑魔法来防止这种情况。如果是这样的话,这个魔术的细节是什么?

流API中的每个方法都不会创建新的循环。。。它将方法组合起来,并在遇到终止方法(如collect)时在单个循环中执行它们。 发件人:

流操作分为中间操作和终端操作 操作,并组合成流管道。溪流 管道由一个源组成,例如集合、数组和 发电机功能或I/O通道;后跟零或更多 中间操作,如Stream.filter或Stream.map;和 终端操作,如Stream.forEach或Stream.reduce

惰性地处理流可以显著提高效率;在一个 管道,如上面的过滤器映射和示例,过滤,映射, 和总和可以融合成一个单一的数据传递,以最小的成本 中间状态。懒惰也可以避免检查所有的问题 不必要时的数据;对于查找第一个 字符串长度超过1000个字符,只需检查 只需要足够的字符串就可以找到一个具有所需特征的字符串 不检查源中所有可用的字符串。这 当输入流无限大时,行为变得更加重要 而且不仅仅是大的

创建新循环的唯一方法是flatMap


除此之外,是的,数据流速度较慢,但相差不大。不过,它们更易于阅读、编写和修改。除此之外,它们还鼓励不可变性,这是为了减少错误代码而对性能的权衡

流API中的每个方法都不会创建新循环。。。它将方法组合起来,并在遇到终止方法(如collect)时在单个循环中执行它们。 发件人:

流操作分为中间操作和终端操作 操作,并组合成流管道。溪流 管道由一个源组成,例如集合、数组和 发电机功能或I/O通道;后跟零或更多 中间操作,如Stream.filter或Stream.map;和 终端操作,如Stream.forEach或Stream.reduce

惰性地处理流可以显著提高效率;在一个 管道,如上面的过滤器映射和示例,过滤,映射, 和总和可以融合成一个单一的数据传递,以最小的成本 中间状态。懒惰也可以避免检查所有的问题 不必要时的数据;对于查找第一个 字符串长度超过1000个字符,只需检查 只需要足够的字符串就可以找到一个具有所需特征的字符串 不检查源中所有可用的字符串。这 当输入流无限大时,行为变得更加重要 而且不仅仅是大的

创建新循环的唯一方法是flatMap


除此之外,是的,数据流速度较慢,但相差不大。不过,它们更易于阅读、编写和修改。除此之外,它们还鼓励不可变性,这是为了减少错误代码而对性能的权衡

不是每次循环时都强烈建议使用stream,有时这是一个非常糟糕的主意,循环更容易,性能更高;我当时看到的可怕的材料。我在这些材料中看到的最多的是stream的许多嵌套方法。stream可以做的远不止一个简单的循环。它可以使用拆分器和其他东西,还可以轻松地以并行、多线程的方式处理数据。然而,第一个因素是可读性,而不是性能。在某些情况下,流的可读性要高得多。即使它可能慢一些纳秒,你通常也会喜欢它。在其他情况下,流读起来非常糟糕,例如,如果您有真正的嵌套和复杂的设置。那就选择经典的循环。首先优化可读性。@ŠimonKocúrek您能添加此注释作为答案吗?不强烈建议每次有循环时都使用stream,有时这是一个非常糟糕的主意,循环更容易,性能更高;我当时看到的可怕的材料。我在这些材料中看到的最多的是stream的许多嵌套方法。stream可以做的远不止一个简单的循环。它可以使用拆分器和其他东西,还可以轻松地以并行、多线程的方式处理数据。然而
,第一个因素是可读性,而不是性能。在某些情况下,流的可读性要高得多。即使它可能慢一些纳秒,你通常也会喜欢它。在其他情况下,流读起来非常糟糕,例如,如果您有真正的嵌套和复杂的设置。那就选择经典的循环。首先优化可读性。@ŠimonKocúrek您能添加此注释作为答案吗?