日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 8中的java.util.Random

發布時間:2023/12/3 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8中的java.util.Random 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java 8中java.util.Random類的簡潔功能之一是對其進行了改進,現在可以返回隨機的數字流 。

例如,要生成一個介于0(含)和1(不含)之間的隨機雙精度數的無限流:

Random random = new Random(); DoubleStream doubleStream = random.doubles();

或生成介于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

參考: all和其他博客中的JCG合作伙伴 Biju Kunjummen提供的Java 8中的java.util.Random 。

翻譯自: https://www.javacodegeeks.com/2014/01/java-util-random-in-java-8.html

總結

以上是生活随笔為你收集整理的Java 8中的java.util.Random的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。