网站首页 > java教程 正文
使用 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/小程序/网站源码资源!
猜你喜欢
- 2024-10-04 谷歌Bard可使用C++、Python等20多种语言生成、调试和注释代码
- 2024-10-04 java代码生成word文档(1)(java代码生成xml文件)
- 2024-10-04 GitHub 2W 星:一键生成前后端代码
- 2024-10-04 java 数字签名以及证书生成(电子签章java 数字证书)
- 2024-10-04 【Spring系列】10 MyBatis-Plus 如何自动生成代码 #java
- 2024-10-04 一键生成前后端代码,一个36k星的企业级低代码平台
- 2024-10-04 推荐一个基于SpringBoot + Mybatis + Vue的代码生成器
- 2024-10-04 一个简单的代码生成器(代码生成器思路)
- 2024-10-04 Java 开源的支持多种sql的基于spring boot的代码生成器的调试
- 2024-10-04 java开发开源工具,api文档自动生成工具
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)