我正在阅读java 8 Random课程中的新增强功能,并且会重复使用有效无限流这一术语。
考虑IntStream ints(int randomNumberOrigin, int randomNumberBound):
返回有效无限的伪随机int值流, 每个符合给定的原点(包括)和约束(不包括)。
有人可以解释一下这个词。
答案 0 :(得分:5)
这意味着您可以将其视为无限制,但从技术上讲,它可能不是无限制的。例如,openjdk 8u40-b25 implementation会返回Long.MAX_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);
}
你看到它调用了new RandomIntsSpliterator (this, 0L, Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
。
RandomIntsSpliterator
的Javadoc说:
用于int流的Spliterator。我们将四个int版本复用到一个类中,方法是将一个小于起点的边界视为无界,并将处理“无限”视为等同于Long.MAX_VALUE 。对于拆分,它使用标准的二分法。除类型外,此类的长版和双版本相同。
这意味着“有效无限流”在这里实现为具有大量元素(Long.MAX_VALUE
)的实际有限流。出于所有实际目的,我猜它可以被视为无限流,因为任何人都希望使用此方法产生超过Long.MAX_VALUE
随机int
的可能性非常小。
如果您查看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(min,max)
相当于调用
ints(Long.MAX_VALUE,min,max)
至少在这个实现中。