gpt4 book ai didi

java - Java中重复数据的计数器

转载 作者:行者123 更新时间:2023-12-01 19:19:23 25 4
gpt4 key购买 nike

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

这是我所做工作的总结:

类(class)用户:

public class User{

private String name;


public String getName() {
return name;
}

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

}

类(class)数据:

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;
}

如果我尝试将计数器添加到用户名(在数据类中),它不会正常工作,因为它显示了整个用户列表,并且它添加了一个自增的数字:罗斯1、约翰2、约翰3、丹4、安娜5...

如果我用计数器修改 User 类的 setter: this.name = name+counter;那么它看起来像这样:Rose0, John0, John0, Dan0, ​​Anna0...

我正在寻找的输出是:

Rose00, John00, John01, Dan00, Anna00...

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

谢谢!

最佳答案

您需要将 map 更改为Map<String, Integer> 。您基本上将拥有一个可按名称访问的计数器 map 。

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

无需将名称映射存储到用户列表,因为通过不断增加的值来“ID-ing”(识别)用户是没有意义的。

tl;dr: 只需使用根据其外观递增的名称出现映射。

import java.util.*;
import java.util.stream.Collectors;

public class NameGenerator {
private static Map<String, Integer> nameOccuranceMap = new HashMap<String, Integer>();

public static void main(String[] args) {
List<User> users = new ArrayList<User>();

for (String name : Arrays.asList("Rose", "John", "John", "Dan", "Anna")) {
if (nameOccuranceMap.containsKey(name)) {
nameOccuranceMap.put(name, nameOccuranceMap.get(name) + 1);
} else {
nameOccuranceMap.put(name, 0);
}
users.add(new User(String.format("%02d%s", nameOccuranceMap.get(name), name)));
}

System.out.println(users.stream().map(User::getName).collect(Collectors.joining(", ")));
}

private static class User {
private String name;
public String getName() { return name; }
public User(String name) { this.name = name; }
@Override public String toString() { return String.format("User [name=%s]", name); }
}
}

输出: 00Rose, 00John, 01John, 00Dan, 00Anna

关于java - Java中重复数据的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59379584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com