据我了解您的问题,您必须存储每个作者的任意姓名列表,并有效地匹配它们。
我假设您已经解决了解析名称、删除“Dr”等非必要/可选部分以及保留“von”和“de”等粒子的问题。您的规范化名称必须是固定大小写的字符串序列(小写可以,但我会坚持使用大写或标题大小写)。
现在, a List<String>
orString[]
将作为HashMap
包含其他详细信息的 a 的键。恐怕这不会很好,因为两者都是可变的,而且我不确定他们的hashCode()
方法是否适合这种情况。
所以我想出了这样的事情:
class AuthorName(object) {
private String[] parts;
public AuthorName(String... name_parts) {
assert name_parts.length > 0;
parts = name_parts;
}
@Override
public int hashCode() {
// hashCode() that only depends on name parts
int result = 0;
for (int i=0; i < parts.length; i+=1) result ^= part.hashCode();
return result;
}
}
Map<AuthorName, ...> authors = new HashMap<AuthorName, ...>();
authors.put(new AuthorName('John', 'Doe'), ...);
assert authors.get(new AuthorName('John', 'Doe')) != 0
这并不能解决许多可能的问题,例如“Joe Random User”、“Joe R User”和“JR User”是同一个人。这应该在不同的层面上解决。
如果您更详细地说明您的情况,并举一两个例子,答案可能会更好。
您可能还对图书馆规范作者姓名的方式感兴趣。人们使用精心设计的 方案来匹配名称。