与 Java 中的重复数据相反

  • 本文关键字:数据 Java java
  • 更新时间 :
  • 英文 :


我在Java方面有问题。在简历中,它将按名称显示用户列表(从 .json 文件中提取(,但我必须为所有用户添加一个后缀 00,从而留下:"name+00"。这样,如果有 2 个同名用户,则程序应通过增加后缀来区分它们。例如,如果两个用户称为"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;
}

如果我尝试将计数器添加到用户名(在 Data 类中(,它将无法正常工作,因为它向我显示了整个用户列表,并且它添加一个自我增加的数字:Rose1、John2、John3、Dan4、Anna5...

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

我正在寻找的输出是:

玫瑰00, 约翰00,

约翰01, 丹00, 安娜00...

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

谢谢!

您需要将地图更改为Map<String, Integer>。您基本上将拥有按名称访问的计数器映射。

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

没有必要将名称映射存储到用户列表中,因为没有通过不断增加的值来"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

最新更新