Meh*_*lik 4 java random stream java-8 java-stream
我正在阅读java 8 Random类中的新增强功能,并且这个术语有效地无限流使用重复.
考虑IntStream整数(int randomNumberOrigin,int randomNumberBound):
返回有效无限的伪随机int值流,每个值符合给定的原点(包括)和绑定(不包括).
有人可以解释这个术语.
这意味着您可以将其视为无限制,但从技术上讲,它可能不是无限制的.例如,openjdk 8u40-b25实现返回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);
}
Run Code Online (Sandbox Code Playgroud)
你看到它打电话了new RandomIntsSpliterator (this, 0L, Long.MAX_VALUE, randomNumberOrigin, randomNumberBound).
Javadoc RandomIntsSpliterator说:
用于int流的Spliterator.我们将四个int版本复用到一个类中,方法是将一个小于起始的边界视为无界,并将"无限"视为等同于Long.MAX_VALUE.对于拆分,它使用标准的二分法.除类型外,此类的长版和双版版本相同.
这意味着"有效无限流"在这里被实现为具有许多元素(Long.MAX_VALUE其中)的实际有限流.出于所有实际目的,我猜它可以被视为无限流,因为任何人都希望使用这种方法产生比Long.MAX_VALUE随机ints 更多的机会可能非常小.
如果你看一个类似的变体,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);
}
Run Code Online (Sandbox Code Playgroud)
你看到那个叫
ints(min,max)
Run Code Online (Sandbox Code Playgroud)
相当于打电话
ints(Long.MAX_VALUE,min,max)
Run Code Online (Sandbox Code Playgroud)
至少在这个实现中.
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |