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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

appium判断元素是否存在_Python+selenium自动化之判定元素是否存在

在测试过程中&#xff0c;我碰到过这类的问题&#xff0c;使用find_element却找不到某个元素而产生异常&#xff0c;这就需要在操作某个元素之前判定该元素是否存在&#xff0c;而selenium中没有判定元素是否存在的方法&#xff0c;或者判定相同的元素有几个&#xff0c;需要操…

棋盘DP三连——洛谷 P1004 方格取数 洛谷 P1006 传纸条 Codevs 2853 方格游戏

P1004 方格取数 题目描述 设有N $\times N$NN的方格图(N $\le 9$)(N≤9)&#xff0c;我们将其中的某些方格中填入正整数&#xff0c;而其他的方格中则放入数字00。如下图所示&#xff08;见样例&#xff09;: A0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 …

html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果

this.p{ m:2,b:2,loftPermalink:,id:fks_082065087087086069087082087095083084084067083083082065,blogTitle:HTML图片CSS滤镜—灰度效果,blogAbstract: ,blogTag:html,blogUrl:blog/static/72507542200941384735902,isPublished:1,istop:false,type:2,modifyTime:13288029920…

怎么通过media foundation将图像数据写入虚拟摄像头_千倍成本压缩!特斯拉开发虚拟激光雷达,替代最贵自动驾驶传感器...

「谁用激光雷达&#xff0c;谁完蛋&#xff01;」在去年特斯拉举办的 Autonomy Day 上&#xff0c;特斯拉 CEO Elon Musk 言辞激烈地炮轰激光雷达。「昂贵的传感器是不必要的&#xff0c;这就像是一大堆昂贵的附属品。」「像阑尾一样。一个阑尾不好——那么&#xff0c;一大堆阑…

使用Drools 6.0进行部署

KieScanner 6.0 KieScanner取代了5.x KnowledgeAgent。 它使用嵌入式Maven允许在运行时解析和检索jar。 6.0应用程序现在可以轻松支持依赖关系和可传递依赖关系&#xff1b; 使用众所周知的Maven语义进行版本控制。 它允许在类路径上进行部署&#xff0c;也可以在运行时动态进行…

activemq安装与配置_ActiveMQ(消息队列)从入门到了解

一、 ActiveMQ 简介 1 什么是 ActiveMQ ActiveMQ 是 Apache 出品&#xff0c;最流行的&#xff0c;能力强劲的开源消息总线。ActiveMQ 是一个 完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现&#xff0c;尽管 JMS 规范出台已经是很久 的事情了&#xff0c;但是 JMS 在当…

智联招聘简历如何导出html,如何将拉勾网(智联招聘)的预览简历导出来

最近在整理简历的时候发现拉勾网/智联招聘上面的预览简历是那么简洁漂亮&#xff0c;可是当我想把他导到本地&#xff0c;发pdf文件给企业时却只能是word&#xff0c;那么的难看&#xff0c;摸索了一会儿找到了一种比较好的方法可以得到预览的简历。1.另存为html文件在这里插入…

Java反编译器的剖析

简单地说&#xff0c;反编译器尝试将源代码转换为目标代码。 但是有很多有趣的复杂性-Java源代码是结构化的&#xff1b; 字节码当然不是。 而且&#xff0c;转换不是一对一的&#xff1a;两个不同的Java程序可能会产生相同的字节码。 我们需要应用启发式方法&#xff0c;以合理…

wps单机无网络版_单平台销量破百万,这个国产单机系列要出网游,还要上主机...

他们想做"国际顶级的单机游戏开发商"。文/彭子诚作为一款国产单机游戏&#xff0c;《古剑奇谭三》在去年年底上市后&#xff0c;至今在 Steam 上依然保持着 83% 的好评率。大量的玩家对于游戏内容给出了认可&#xff0c;“用心”这个词是最高频出现的词语。Wegame 官…

JavaFX 8的弹出式编辑器

在过去的几个月中&#xff0c;我很高兴与JavaFX 8一起使用&#xff0c;以便为计划和调度应用程序实现复杂的用户界面。 所需的功能之一是执行“就地”编辑的方法&#xff0c;即快速编辑用户选择对象的某些基本属性的方法。 遵循“如果您无法创新&#xff0c;就模仿”的原则&am…

flex实现水平居中和两栏布局

<!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title>水平垂直的实现</title><style>.wrapper{width:25…

opencv 多线程加速_线程池给你写好了,想加速拿来用就行哈

图像拼接实现见&#xff1a;OpenCV源码系列|图像拼接1OpenCV源码系列|图像拼接2耗时在调用函数&#xff1a;Mat pano; Ptr stitcher Stitcher::create(mode); Stitcher::Status status stitcher->stitch(imgs, pano)能否将这一步放进线程池里进行加速呢&#xff1f;1. 测试…

poping 心法

音乐 01.Eamon - (How Could You) Bring Him Home02.The Pussycat Dolls - Buttons03.Most Wanted ft. Fingazz, Volture -From Juvi To The Penitentiary (Instrumental)04.Kaila Yu - Move05.Danity Kane - Show Stopper06.Slick Dogg - Bang On m07.Danity Kane - Show Stop…

html5 video修改默认样式,HTML5中将video设置为背景的方法

主要用到了video标签&#xff0c;css样式&#xff0c;原理是先将video标签利用position:fixed;使video标签脱离文档流&#xff0c;在将他的z-index设置为最低的&#xff0c;比如-9999。再插入的内容自然就覆盖在视频上面了。1.首先&#xff0c;将video插入到网页中&#xff0c;…

ES6语法的学习与实践

ES6是JavaScript语言的新一代标准&#xff0c;是ECMAScript的第六个版本&#xff0c;加入了很多新的功能和语法&#xff0c;在很多框架&#xff0c;如在使用Vue,React等框架的项目中一般都采用ES6语法来编写的&#xff0c;下面对经常用到的ES6语法做简要的介绍。 1.let,const l…

这是一次 docker 入门实践

前言 其实接触 docker 也有一段时间了&#xff0c;但是一直没有做下总结&#xff0c;现在网上关于 docker 的介绍也有很多了&#xff0c;本着好记性不如烂笔头的原则&#xff0c;还是自己再记录一波吧。 实现目标 安装 docker ce 探索 docker 基本概念及用法环境准备 Centos7 6…

html dom概念,js学习之HTML DOM的一些基础概念

经过近一个星期,总算把w3chool上的HTML DOM的实例差不多看了一遍,因为本身对其中的很多都用过,所以看起来也很快,现在就再系统的回顾下HTML DOM的一些概念和基础的东西,大部分都是从w3school上看到的什么是DOMDOM是w3c(万维网联盟)的标准DOM定义了访问HTML和XML的标准"W3C…

关于Java垃圾收集

本文讨论的是使用的最受欢迎的框架之一带来的开销–我敢打赌&#xff0c;几乎没有应用程序不使用java.util.Collections。 本文基于以下事实&#xff1a;框架为例如集合的初始大小提供了默认值。 因此&#xff0c;我们有一个假设&#xff0c;即大多数人不会费心地自行管理其收…

ansys命令流_ANSYS命令流建模3之划分单元+施加弹簧

以马蹄形隧道为例&#xff0c;本文介绍如何添加荷载等隧道如上图所示!设置线单元材料属性&#xff0c;划分单元(二衬单元)lsel,s,,,1,6 !LSEL,Type,Item,Comp,VMIN, VMAX,VINClATT,1,1,3 !给线单元付材料号、实常数、单元类型号 LATT, MAT, REAL, TYPE, ESYSMSHKEY,1 …

Linux 系统中用户切换(su user与 su - user 的区别)

1,su命令 &#xff08;su为switch user&#xff0c;即切换用户的简写&#xff09; 格式&#xff1a;su -l USERNAME&#xff08;-l为login&#xff0c;即登陆的简写&#xff0c;其中l可以省略&#xff09; 如果不指定USERNAME&#xff08;用户名&#xff09;&#xff0c;默认即…