当我尝试在我的应用程序中生成唯一的客户ID时,我遇到了问题。我希望数字从1开始然后上升。我有一个使用树形图的寄存器类,它使用以下代码生成下一个客户编号:
<div ng-controller="secondCtrl">
</div>
当我在我的应用程序中生成客户时,即使我遍历地图,我也会得到重复的数字。创建客户时,我创建了对象,运行此方法,使用ID的set方法并将其添加到寄存器,但它不起作用。有人有解决方案吗?
答案 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的答案显示了如何更优雅地做同样的事情。)
您的方法不起作用,因为地图未按顺序迭代。例如,如果您分别遍历编号为2
和1
的两个用户,会发生什么:
number == 2
:不是,所以继续number == 1
是否为number = 2
,设置为number
现在循环完成,if (myTable.Rows[i]["FieldName"] != null && myTable.Rows[i]["FieldName"].ToString() != "") //Exception happens here
{
strFieldName = myTable.Rows[i]["FieldName"].ToString();
}
为2,即使id为2的用户已经存在。如果它按顺序迭代,那就可以了。