Java中重复数据的计数器

Java中重复数据的计数器,java,Java,我对java有一个问题。在resume中,它将按名称显示用户列表(从.json文件中提取),但我必须为所有用户添加后缀00,因此留下:“name+00”。这样,如果有两个用户同名,那么程序应该通过增加后缀来区分他们。例如,如果两个用户被称为“John”,则名称应如下所示:“John00”和“John01” 以下是我所做工作的总结: 类用户: public class User{ private String name; public String getName() {

我对java有一个问题。在resume中,它将按名称显示用户列表(从.json文件中提取),但我必须为所有用户添加后缀00,因此留下:“name+00”。这样,如果有两个用户同名,那么程序应该通过增加后缀来区分他们。例如,如果两个用户被称为“John”,则名称应如下所示:“John00”和“John01”

以下是我所做工作的总结:

类用户:

public class User{

    private String name;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
private HashMap<String, List<User>> readUsers() {
    HashMap<String, List<User>> usuarios= new HashMap<>();

    SimpleFeatureCollection collection = datastore.getFeatureCollection();

    try (SimpleFeatureIterator itrusuarios = collection.features()) {

        int contador=0;
        while (itrusuarios.hasNext()) {

            SimpleFeature simpleFeature = itrusuarios.next();
            User usuario = new User();

           usuario.setName(simpleFeature.getID()+contador); //This don't work
            contador++;

            System.out.println(usuario.getName);
        }

    } finally {
        datastore.dispose();
    }


    return usuarios;
}
类数据:

public class User{

    private String name;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
private HashMap<String, List<User>> readUsers() {
    HashMap<String, List<User>> usuarios= new HashMap<>();

    SimpleFeatureCollection collection = datastore.getFeatureCollection();

    try (SimpleFeatureIterator itrusuarios = collection.features()) {

        int contador=0;
        while (itrusuarios.hasNext()) {

            SimpleFeature simpleFeature = itrusuarios.next();
            User usuario = new User();

           usuario.setName(simpleFeature.getID()+contador); //This don't work
            contador++;

            System.out.println(usuario.getName);
        }

    } finally {
        datastore.dispose();
    }


    return usuarios;
}
private HashMap readUsers(){
HashMap usuarios=新HashMap();
SimpleFeatureCollection集合=数据存储。getFeatureCollection();
try(SimpleFeatureIterator iTrusarios=collection.features()){
int contador=0;
while(itrusarios.hasNext()){
SimpleFeature SimpleFeature=itRusarios.next();
User usuario=新用户();
usuario.setName(simpleFeature.getID()+contador);//这不起作用
contador++;
System.out.println(usuario.getName);
}
}最后{
datastore.dispose();
}
返还利息;
}
如果我尝试将计数器添加到用户的名称(在数据类中),它将无法正常工作,因为它显示了整个用户列表,并且添加了一个自我增加的数字:Rose1、John2、John3、Dan4、Anna5

如果我用计数器修改用户类的setter:
this.name=name+counter
;然后看起来是这样的:罗斯0,约翰0,约翰0,丹0,安娜0

我想要的结果是:

罗斯00,约翰00,约翰01,丹00,安娜00

也就是说,当您找到相同的名称时,只增加该名称


谢谢大家!

您需要将地图更改为
map
。实际上,您将拥有按名称访问的计数器的映射

当您请求创建新用户时,请检查映射以查看当前计数器值设置为什么。每次遇到名称时,您都会递增关联的名称键

不需要将名称映射存储到用户列表,因为没有必要通过不断增加的值来“标识”(识别)他们

tl;dr:只需使用名称匹配图,该匹配图根据其外观递增

import java.util.*;
导入java.util.stream.collector;
公共类名称生成器{
私有静态映射nameOccuranceMap=newHashMap();
公共静态void main(字符串[]args){
列表用户=新建ArrayList();
for(字符串名称:Arrays.asList(“Rose”、“John”、“John”、“Dan”、“Anna”)){
if(名称发生映射containsKey(名称)){
nameOccuranceMap.put(name,nameOccuranceMap.get(name)+1);
}否则{
nameOccuranceMap.put(名称,0);
}
添加(新用户(String.format(“%02d%s”,nameOccuranceMap.get(name),name));
}
System.out.println(users.stream().map(User::getName).collect(collector.joining(“,”));
}
私有静态类用户{
私有字符串名称;
公共字符串getName(){return name;}
公共用户(字符串名){this.name=name;}
@重写公共字符串toString(){return String.format(“User[name=%s]”,name);}
}
}

输出:
00Rose,00John,01John,00Dan,00Anna
我无法理解您的策略。您的方法创建一个HashMap,但从不使用它做任何事情,最后返回它(空)。在深入研究代码之前,您的实现策略是什么?我支持@JBNizet所说的。总的来说,您似乎只存储了一个计数器,但需要为每个n存储一个计数器,其中n=唯一名称的数量。为此,我将使用名称的哈希映射进行计数器。