我碰巧知道,在下面的表达式中,使用i++
将导致无限流,i
将始终为 0。我感到困惑是因为我认为i++
没有使用返回值,即使如此,它也不应该在i
之后中断增量。
IntStream.iterate(0, i-> i<10, i-> ++i).forEach(....)
Run Code Online (Sandbox Code Playgroud)
通过检查 Java 9 的 API IntStream
:http : //download.java.net/java/jdk9/docs/api/java/util/stream/IntStream.html#iterate-int-java.util.function.IntPredicate-java。 util.function.IntUnaryOperator-
最后一个功能(i -> ++i
在您的情况下)是确定下一个值是什么。
如果你 put i->i++
,假设它是一个后缀增量运算符,则i++
计算为i
增量之前。这意味着它总是返回相同的值(0
在你的情况下是种子)。因此,它的工作原理就像您放置i -> i
. 请注意,Java 中的参数是按值传递的。因此,您在 lambda 中的增量不会影响调用者。
因此,hasNext
谓词(i->i<10
在您的情况下是第二个参数)始终评估为真,从而为您提供一个无限的全零流。
归档时间: |
|
查看次数: |
234 次 |
最近记录: |