无法生成唯一的用户编号
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 的回答展示了如何更优雅地做同样的事情。)
您的方法无效,因为地图未按顺序迭代。例如,如果您分别遍历编号为 2
和 1
的两个用户,会发生以下情况:
- 从 "number = 1"
开始
- 检查是否
number == 2
:不是,所以继续
- 检查是否
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);
当我尝试在我的应用程序中生成唯一的客户 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 的回答展示了如何更优雅地做同样的事情。)
您的方法无效,因为地图未按顺序迭代。例如,如果您分别遍历编号为 2
和 1
的两个用户,会发生以下情况:
- 从 "number = 1" 开始
- 检查是否
number == 2
:不是,所以继续 - 检查是否
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);