У меня небольшой Java-проект, который пытается сопоставить данную запись клиента с одной в базе данных на основе ближайшего совпадения.
У данного клиента есть уникальная комбинация строковых переменных - Name, Address1, Address2
Если некоторые данные отсутствуют, то для данной переменной по умолчанию используется значение «ALL».
Код извлекает все записи базы данных и создает карту записей клиентов, где customerKeyуникальная комбинация имени, адреса1, адреса2. CustomerKey - это класс этих строковых переменных с их собственными методами получения / установки и хэш-кодом (из apache HashCodeBuilder).
CustomerData - это просто дамп всех данных в записи для этого клиента в базе данных
Код работает до сих пор как обычно
String name = "Harry";
String address1 = "hello street";
String address2 = "hello town";
map<customerKey, CustomerData> lookupMap = getDataFromDB();
CustomerData data = lookupMap.get(new CustomerKey(name, address1, address2));
if (data==null){
data = lookupMap.get(new CustomerKey("ALL", address1, address2));
}
if (data==null){
data = lookupMap.get(new CustomerKey("ALL", "ALL", address2));
}
if (data==null){
data = lookupMap.get(new CustomerKey("ALL", "ALL", "ALL"));
}
return data
Я хочу иметь возможность добавлять подстановочные знаки в процессе сопоставления, где он применяется к именам. Я могу найти регулярное выражение для того, что я хочу, например, . * Arry и добавить это к имени конкретной записи.
И я знаю, что если я хочу использовать групповые сравнениятогда мне нужно использовать .matches вместо .equals (например, "harry" .matches (". * arry") .
Но у меня возникли трудности с продвижением вперед.
У кого-нибудь есть совет?