无法生成唯一的用户编号

Not able to generate a unique user-number

当我尝试在我的应用程序中生成唯一的客户 ID 时遇到问题。我希望数字从 1 开始上升。我有一个 register-class 使用树图生成下一个客户编号使用此代码:

public String generateNumber()
{
    int number = 1;

    for(Map.Entry<String, Forsikringkunde> entry : this.entrySet())
    {
        if(entry.getValue().getNumber().equals(String.valueOf(number)))
        {
            number++;
        } 
    }return String.valueOf(number);
}

当我在我的应用程序中生成客户时,即使我遍历地图,我也会得到重复的数字。创建客户时,我创建了对象 运行 此方法,对 ID 使用设置方法并将其添加到寄存器中,但它不起作用。有人有解决方案吗?

修改代码以找到地图中的最大数字,然后使用那个 +1:

public String generateNumber()
{
    int max = -1;

    for(Map.Entry<String, Forsikringkunde> entry : this.entrySet())
    {
        int entry = Integer.parseInt(entry.getValue().getNumber());
        if(entry > max)
        {
            max = entry;
        } 
    }
    return String.valueOf(max + 1);
}

(这模仿了你的编码风格。aioobe 的回答展示了如何更优雅地做同样的事情。)

您的方法无效,因为地图未按顺序迭代。例如,如果您分别遍历编号为 21 的两个用户,会发生以下情况:

  1. 从 "number = 1"
  2. 开始
  3. 检查是否number == 2:不是,所以继续
  4. 检查是否number == 1:是,所以设置number = 2

现在循环完成,number 为 2,即使 ID 为 2 的用户已经存在。如果它按顺序迭代,它就会起作用。

如果你在 Java 8,我建议你试试这个:

int max = this.values()
              .stream()
              .map(Forsikringkunde::getNumber)
              .mapToInt(Integer::parseInt)
              .max()
              .orElse(0);

return String.valueOf(max + 1);