网站首页 > 技术文章 正文
使用 Java 流生成无限数据序列
介绍
在本文中,我们将使用 Java Streams API 生成模拟数据
想法是使用 Stream generator() 方法,然后使用它来生成自定义数据类型,例如 emailID。
生成无限序列的 UUID
Streams API 提供了获取供应商对象的生成方法。 供应商是一个不接受输入但返回输出的功能接口。
所以我们可以构建任何逻辑作为函数参数并传递给生成方法。
在下面的示例中,我们将 UUID 实例生成为无限序列。
private static void streamGenerate(){
Supplier<UUID> supplier = () -> UUID.randomUUID();
Stream<UUID> generate = Stream.generate(supplier);
generate.forEach(a-> System.out.println(a));
}
生成无限序列的消息
我们可以使用上述逻辑来实现自定义逻辑来生成任何对象。
让我们考虑一个案例,我们正在构建一个 PubSub 消息发布者客户端,并且我们想要模拟生成客户端需要发布的无限消息序列。
我们可以轻松地扩展流生成器逻辑来构建它。 下面是我们的消息 POJO,它采用消息 ID 和消息本身。
static class Message{
int id;
String message;
public Message(int id, String message) {
this.id = id;
this.message = message;
}
@Override
public String toString() {
return "Message{" +
"id=" + id +
", message='" + message + '\'' +
'}';
}
}
下面我们定义了返回 Message 对象的供应商。
我们再次使用 Stream 生成器生成无限序列的 Message 对象并打印它。
private static void streamMessage(){
AtomicInteger atomicInteger = new AtomicInteger();
Supplier<Message> supplier = () -> {
Message message = new Message(new Random().nextInt(), "Message : "+atomicInteger.getAndIncrement());
return message;
};
Stream.generate(supplier)
.forEach(a-> System.out.println("Message Published: " +a.toString()));
}
生成模拟 emailID 数据
在下面的示例中,我们将使用流生成器来生成模拟 emailID 数据。
我们已经创建了我们希望在 emailId 中看到的电子邮件域列表。
我们构建 Supplier 实例,该实例首先生成随机用户名,然后与从我们的域列表中挑选的随机域连接。
一旦我们准备好供应商实例,我们就可以调用此方法并提供大小作为我们需要的 emailId 的数量。
private static void streamMailId(long size) {
List<String> domain = List.of("@gmail.com", "@Yahoo.com", "@outlook.com");
Supplier<String> supplier = () ->{
String userName = generateUserName();
Random random = new Random();
int index = random.nextInt(domain.size());
return userName+domain.get(index);
};
Stream.generate(supplier).limit(size).forEach(a-> System.out.println(a));
}
下面是生成随机用户名的代码。 逻辑是只选择随机字符并附加为用户名定义的长度数。
private static String generateUserName() {
String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
Random random = new Random();
StringBuilder userName = new StringBuilder();
for(int i=0;i<10;i++){
userName.append(chars.charAt(random.nextInt(chars.length())));
}
return userName.toString();
}
一旦我们执行我们的客户端代码,我们将看到下面的输出。
因此,借助生成功能和添加自定义供应商逻辑,生成模拟数据非常容易。
结论
在本文中,我们使用 Streams api generate() 方法来生成无限的数据序列。
我们研究了自定义模拟数据实现,例如 emailId 和消息类型。
关注七爪网,获取更多APP/小程序/网站源码资源!
- 上一篇: java编程、java学习:深刻理解Java编程的7个例子
- 下一篇: Java常用的7大排序算法汇总
猜你喜欢
- 2025-07-03 有望取代 java?GO 语言项目了解一下
- 2025-07-03 ScalersTalk成长会Java小组第7周学习笔记
- 2025-07-03 java基础回顾(七)——类和方法
- 2025-07-03 泣血推荐,Java高阶必备的7大经典书籍
- 2025-07-03 centos7 java dockerfile
- 2025-07-03 对Java意义重大的7个性能指标
- 2025-07-03 Net7/JDK19/Delphi10性能对比(续)
- 2025-07-03 java文本对比工具源码7
- 2025-07-03 崩溃卡死?Java老司机私藏的7条救命命令,5分钟搞定线上事故!
- 2025-07-03 Java 中的 7 种重试机制,还有谁不会?!
- 最近发表
-
- Qt编程进阶(63):Qt Quick高级控件的使用
- Qt编程进阶(47):QML鼠标事件处理(qt编程难不难)
- 使用Xamarin和Visual Studio开发Android可穿戴设备应用
- Qt使用教程:创建Qt Quick应用程序(三)
- QML性能优化 | 常见界面元素优化(qml布局自适应大小)
- Qt使用教程:创建移动应用程序(二)
- Qt Quick 多媒体开发播放音乐和视频
- Qt使用教程:创建Qt Quick UI表单(三)
- 如何将 Qt 3D 渲染与 Qt Quick 2D 元素结合创建太阳系行星元素?
- QML控件:TextInput, TextField, TextEdit, TextArea用法及自定义
- 标签列表
-
- axure 注册码 (25)
- exploit db (21)
- mutex_lock (30)
- oracleclient (27)
- nfs (25)
- springbatch (28)
- oracle数据库备份 (25)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- c 数组 (33)
- pascal语言教程 (23)
- ppt 教程 (35)
- java7 (24)
- 自适应网站制作 (32)
- server服务自动停止 (25)
- 超链接去掉下划线 (34)
- 什么是堆栈 (22)
- map entry (25)
- ubuntu装qq (25)
- outputstreamwriter (26)
- fill_parent (22)