Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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_Random_Java 8_Stream_Java Stream - Fatal编程技术网

Java “是什么意思?”;“有效无限流”;

Java “是什么意思?”;“有效无限流”;,java,random,java-8,stream,java-stream,Java,Random,Java 8,Stream,Java Stream,我在课堂上读到了新的增强功能,有一个术语“无限流”被反复使用 考虑: 返回有效的无限伪随机整数值流, 每个符合给定来源(包括)和约束(排除) 有人能解释一下这个词吗。它的意思是你可以将它视为无限的,但从技术上讲,它可能不是无限的。例如,返回Long.MAX\u VALUE元素流: public IntStream ints(int randomNumberOrigin, int randomNumberBound) { if (randomNumberOrigin >= rando

我在课堂上读到了新的增强功能,有一个术语“无限流”被反复使用

考虑:

返回有效的无限伪随机整数值流, 每个符合给定来源(包括)和约束(排除)


有人能解释一下这个词吗。

它的意思是你可以将它视为无限的,但从技术上讲,它可能不是无限的。例如,返回
Long.MAX\u VALUE
元素流:

public IntStream ints(int randomNumberOrigin, int randomNumberBound) {
    if (randomNumberOrigin >= randomNumberBound)
        throw new IllegalArgumentException(BadRange);
    return StreamSupport.intStream
            (new RandomIntsSpliterator
                     (this, 0L, Long.MAX_VALUE, randomNumberOrigin, randomNumberBound),
             false);
}
您可以看到它调用了
新的randomintspliterator(这个,0L,Long.MAX\u值,randominumberorigin,randominumberbound)

randomintspliterator
的Javadoc说:

int流的拆分器。我们通过将小于原点的边界视为无界,并通过将“无限”视为与Long.MAX_值等效,将四个int版本复用为一个类。对于拆分,它使用标准的除以二的方法。除类型外,此类的long和double版本是相同的

这意味着这里的“有效无限制流”实际上是一个有限流,包含很多元素(
Long.MAX\u VALUE
)。出于所有实际目的,我想它可以被视为一个无限流,因为任何人都希望使用这种方法产生超过
Long.MAX_VALUE
random
int
s的可能性很小

如果您查看一个类似的
ints
变量,它返回一个请求大小的
IntStream

public IntStream ints(long streamSize, int randomNumberOrigin,
                      int randomNumberBound) {
    if (streamSize < 0L)
        throw new IllegalArgumentException(BadSize);
    if (randomNumberOrigin >= randomNumberBound)
        throw new IllegalArgumentException(BadRange);
    return StreamSupport.intStream
            (new RandomIntsSpliterator
                     (this, 0L, streamSize, randomNumberOrigin, randomNumberBound),
             false);
}
相当于打电话

ints(Long.MAX_VALUE,min,max)

至少在这个实现中是这样。

为什么要投反对票??你能解释一下吗?(定义2)(也是定义2)@user2357112我是在
java流
而不是
Grammar
@user2357112的上下文中问这个问题的,你能看看答案吗,语法上的
Unlimited
和Java中的
Unlimited
有很大的区别。这个问题可以通过查字典来回答。是的,它不是无限的,但实际上是无限的:“实际上:实际上”。因此
有效无限流
相当于
长.MAX_值的流。这实际上不是无限的。不过,
Long.MAX\u值
是一个实现细节。将来的版本和其他Java实现可以自由地使其实际上不受限制,或者选择更小或更大的长度,只要流仍然有效地不受限制。@MehrajMalik:
Java.util.Random
在2之后开始重复⁴⁸ 值,因此,如果在281474976710656个元素之后,短路条件没有得到满足,比如说几天后,您可以终止您的应用程序,否则,即使您设法在纳秒内处理一个值,您也需要将近三百年来处理
Long.MAX_value
元素。但请注意,永久占用不是无限流的保证属性,只是技术限制,例如,
random.ints().average()
可以在有限的时间内计算,如果流这样做,就不会有任何错误。
ints(Long.MAX_VALUE,min,max)