无法生成唯一的用户编号

时间:2015-05-08 19:44:11

标签: java unique-id

当我尝试在我的应用程序中生成唯一的客户ID时,我遇到了问题。我希望数字从1开始然后上升。我有一个使用树形图的寄存器类,它使用以下代码生成下一个客户编号:

<div ng-controller="secondCtrl">
</div>

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

2 个答案:

答案 0 :(得分:1)

如果你使用的是Java 8,我建议你试试这个:

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

return String.valueOf(max + 1);

答案 1 :(得分:0)

将代码修改为在地图中找到最大数字,然后使用该+ 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. 检查number == 2:不是,所以继续
  3. 检查number == 1是否为number = 2,设置为number
  4. 现在循环完成,if (myTable.Rows[i]["FieldName"] != null && myTable.Rows[i]["FieldName"].ToString() != "") //Exception happens here { strFieldName = myTable.Rows[i]["FieldName"].ToString(); } 为2,即使id为2的用户已经存在。如果它按顺序迭代,那就可以了。