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,约翰2,约翰3,丹4,安娜5...
如果我用计数器修改 User 类的设置器this.name = name+counter
:然后看起来像这样:Rose0,John0,John0,Dan0,Anna0...
我正在寻找的输出是:
玫瑰00,约翰00,约翰01,丹00,安娜00...
也就是说,当你找到相同的名字时,只增加那个名字。
谢谢!
解决方案
您需要将地图更改为Map<String, Integer>
. 您基本上将拥有一个按名称访问的计数器映射。
当您请求创建新用户时,您检查地图以查看当前计数器值设置为什么。每次遇到名称时,都会增加关联的名称键。
无需将名称映射存储到用户列表中,因为没有必要通过不断增加的值来“识别”(识别)他们。
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
推荐阅读
- variables - wxPython使用变量来引用对象
- mysql - 禁用 ONLY_FULL_GROUP_BY mysql 8 Ubuntu 20.04 LTS
- excel - VBA从另一个形状颜色中获取多个渐变颜色
- python - 从多个 csv 文件中提取所有特定行(单独)并组合行以另存为新文件
- composer-php - 如何将内部公共存储库添加到 satis.json?
- umbraco - Umbraco 8 IUmbracoEntity AdditionalData
- vue.js - 单击时,按钮不会在 vuejs 中调用我的方法
- php - 无故显示重复的 pdf 图标图像
- ruby-on-rails - 错误:没有将符号隐式转换为整数
- c# - htmlFieldPrefix 打破局部视图之外的名称