如何使用java生成1000个唯一的电子邮件ID[英] How to generate 1000 unique email-ids using java

问题描述

我的要求是在 Java 中生成 1000 个唯一的电子邮件 ID.我已经生成了随机文本并使用 for 循环来限制要生成的电子邮件 ID 的数量.问题是当我执行时生成了 10 个电子邮件 ID,但都是相同的.

下面是代码和输出:

public static void main() {
    first fr = new first();
    String n = fr.genText()+"@mail.com";

    for (int i = 0; i<=9; i++) {
        System.out.println(n);
    }
}

public String genText() {
    String randomText = "abcdefghijklmnopqrstuvwxyz";
    int length = 4;
    String temp = RandomStringUtils.random(length, randomText);
    return temp;
}

输出是:

myqo@mail.com
myqo@mail.com
...
myqo@mail.com

当我执行上述相同的程序时,我会得到另一组邮件 ID.示例:而不是 'myqo' 它将是 'bfta'.但我的要求是生成不同的唯一 ID.

例如:

myqo@mail.com
bfta@mail.com
kjuy@mail.com

推荐答案

把你的String初始化放在for语句中:

for (int i = 0; i<=9; i++) {
    String n = fr.genText()+"@mail.com";
    System.out.println(n);
}

我想稍微重写一下你的方法:

public String generateEmail(String domain, int length) {
    return RandomStringUtils.random(length, "abcdefghijklmnopqrstuvwxyz") + "@" + domain;
}

而且可以这样调用:

generateEmail("gmail.com", 4);

据我了解,您想要生成唯一的 1000 封电子邮件,那么您可以通过 Stream API 以一种方便的方式做到这一点:

Stream.generate(() -> generateEmail("gmail.com", 4))
      .limit(1000)
      .collect(Collectors.toSet())

但问题依然存在.我特意收集了一个 Stream<String> 到一个 Set<String>(删除重复项)以找出它的 size().如您所见,大小并不总是等于 1000

999
1000
997

这意味着即使对于如此小的范围,您的算法也会返回重复值.

因此,您最好研究已经为 Java 编写的电子邮件生成器或改进您自己的(例如,通过添加数字、一些特殊字符,进而生成 很多例外).

本文地址:https://www.itbaoku.cn/post/978628.html