使用 Java 流生成无限数据序列
介绍
在本文中,我们将使用 Java Streams API 生成模拟数据
想法是使用 Stream generator() 方法,然后使用它来生成自定义数据类型,例如 emailID。
生成无限序列的 UUID
Streams API 提供了获取供应商对象的生成方法。 供应商是一个不接受输入但返回输出的功能接口。
所以我们可以构建任何逻辑作为函数参数并传递给生成方法。
在下面的示例中,我们将 UUID 实例生成为无限序列。
private static void streamGenerate(){
Supplier supplier = () -> UUID.randomUUID();
Stream 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 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 domain = List.of("@gmail.com", "@Yahoo.com", "@outlook.com");
Supplier 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/小程序/网站源码资源!