Java 8里面的java.util.Random
Published:
01 Mar 2014
Category:
Java
在Java 8里面,java.util.Random经过改进后增加了一个实用的功能,可以返回一个随机数的流。
比如,如果要生成[0, 1)之间的随机浮点数的无限流:
或者要生成[0, 100)间的整数的无限流:
那么一个无限的随机流有什么用呢?下面我会列举出几个场景。不过需要注意的是这是个无限流,一旦开始操作这个流,就必须在有限的操作内终止,否则这个操作将永远不会停止!
比如,获取10个随机整数并打印出来:
或者生成一个包含100个随机整数的列表:
对于高斯伪随机数来说,没有像random.doubles()这样创建流的方式,但是用Java 8提供的一个方法也很容易实现:
这里我用了Stream.generate这个API来调用了一个高斯数的生产者,这个生产者用的是Random类里的一个现成的方法。
现在,有了伪随机的浮点数和高斯浮点数后,我们来做点有意思的事情吧。我想做的是获取这两个流生成的浮点数的一个分布情况,正常情况下,伪随机浮点数应该是呈连续均匀分布的,而高斯浮点数应该呈正态分布。
在下面的代码中,我将会生成一份上百万随机数的分布状况,这里用到了Java8的流API中提供的大量设施:
上面的代码输出如下:
同样再生成一个高斯随机数的分布:
数据分布图不出所料:
随机数的:
高斯随机数的:
原创文章转载请注明出处:Java 8里面的java.util.Random
英文原文链接