Java 8中的java.util.Random
Java 8中java.util.Random類的簡潔功能之一是對其進行了改進,現在可以返回隨機的數字流 。
例如,要生成一個介于0(含)和1(不含)之間的隨機雙精度數的無限流:
或生成介于0(含)和100(不含)之間的無限整數流:
Random random = new Random(); IntStream intStream = random.ints(0, 100);因此,我將演示一些場景,但請記住該無限隨機流有什么用處,盡管由于這是無限流,所以一旦以某種方式限制了該流,則必須執行任何終端操作,否則操作不會終止!
例如。 獲得10個隨機整數的流并打印它們:
intStream.limit(10).forEach(System.out::println);或生成100個隨機整數的列表:
List<Integer> randomBetween0And99 = intStream.limit(100).boxed().collect(Collectors.toList());對于高斯偽隨機值,沒有與random.doubles()等效的流,但是很容易拿出Java 8提供的功能:
Random random = new Random(); DoubleStream gaussianStream = Stream.generate(random::nextGaussian).mapToDouble(e -> e);在這里,我使用Stream.generate api調用傳遞給Supplier,該Supplier用Random類中已經可用的方法生成下一個高斯。
因此,現在要對偽隨機雙精度流和高斯偽隨機雙精度流進行一些更有趣的操作,我想做的是獲取這兩個流中每個流的雙精度分布,期望是繪制時的分布對于偽隨機雙精度子應均勻分布,對于高斯偽隨機雙精度子應呈正態分布。
在下面的代碼中,我將為一百萬個偽隨機值生成這樣的分布,它使用了新的Java 8 Streams API提供的許多功能:
Random random = new Random(); DoubleStream doubleStream = random.doubles(-1.0, 1.0); LinkedHashMap<Range, Integer> rangeCountMap = doubleStream.limit(1000000).boxed().map(Ranges::of).collect(Ranges::emptyRangeCountMap, (m, e) -> m.put(e, m.get(e) + 1), Ranges::mergeRangeCountMaps);rangeCountMap.forEach((k, v) -> System.out.println(k.from() + "\t" + v));這段代碼沿這些行吐出數據:
-1 49730 -0.9 49931 -0.8 50057 -0.7 50060 -0.6 49963 -0.5 50159 -0.4 49921 -0.3 49962 -0.2 50231 -0.1 49658 0 50177 0.1 49861 0.2 49947 0.3 50157 0.4 50414 0.5 50006 0.6 50038 0.7 49962 0.8 50071 0.9 49695并類似地生成一百萬個高斯偽隨機值的分布:
Random random = new Random(); DoubleStream gaussianStream = Stream.generate(random::nextGaussian).mapToDouble(e -> e); LinkedHashMap<Range, Integer> gaussianRangeCountMap =gaussianStream.filter(e -> (e >= -1.0 && e < 1.0)).limit(1000000).boxed().map(Ranges::of).collect(Ranges::emptyRangeCountMap, (m, e) -> m.put(e, m.get(e) + 1), Ranges::mergeRangeCountMaps);gaussianRangeCountMap.forEach((k, v) -> System.out.println(k.from() + "\t" + v));繪制數據可獲得預期結果:
對于偽隨機數據:
對于高斯數據:
- 完整的代碼可在此處查看 -https://gist.github.com/bijukunjummen/8129250
翻譯自: https://www.javacodegeeks.com/2014/01/java-util-random-in-java-8.html
總結
以上是生活随笔為你收集整理的Java 8中的java.util.Random的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海南的青芒果怎么吃 四种青芒果吃法分享
- 下一篇: Java反编译器的剖析