我正在尝试开发一个解析文件(即逗号,制表符分隔)并查找重复条目的应用程序。需要将重复的条目写入单独的文件,原始输入文件保持不变。我遇到的问题是我无法决定如何找到这些比赛?
让我们假设数据如下:
id,Firstname,Lastname,Address,Country
1,James,Michael,123 St,USA
2,James,Michae l,123 St,AU
3,Steve,Smith,12445,UK
*规则是只有当firstname,lastname,address
匹配时才会将两个记录视为重复记录(请记住算法中不能考虑空格)
以下是我正在努力解决的问题
感谢您的任何建议
答案 0 :(得分:1)
继承人我将如何做到这一点。 创建一个包含这些成员的Person类(名字,姓氏,地址,......) 覆盖toString()以返回唯一字符串,您还需要为您的person类重写equals()和hashCode()。
@Override
public String toString(){
return firstname+lastname+address;
}
然后你需要一个桶来保存那些对象,使用键值数据结构lika a Map。
Map<String, Person>
然后你只需使用对象的toString作为键,将对象本身作为值。
处理存储桶时,可能是在一个循环中,你必须检查你的存储桶是否已包含该人物对象的副本?
/*look for duplicates*/
for (Person obj : allPersonsList) {
if (uniquePersonMap.containsKey(obj.toString())) {
Person previousPerson = uniquePersonMap
.get(obj.toString();
\\do something with previous or current person object
}
uniquePersonMap.put(obj.toString();
HashMap将足够快以根据其哈希值获取对象但是有5000000条记录,您可能会遇到一些性能问题或内存不足问题,因此您可能希望在任何给定时间内保持尽可能少的obj 希望这可以帮助 快乐的编码