王剑编程网

分享专业编程知识与实战技巧

七爪源码:如何在 Java 中生成模拟数据

使用 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/小程序/网站源码资源!

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言