То, что вы можете сделать, чтобы избежать многих других утверждений, это создать некоторую абстракцию валидации.
interface Validator<A, B> {
boolean validate(A receivedObject, B existingObject);
}
Затем для каждого if
создайте новую реализацию Validator
.
class NameValidator implements Validator<Expeceted, Received> {
@Override
public boolean validate(Expeceted receivedObject, Received existingObject) {
return existingObject.getName().equals(receivedObject.getName());
}
}
class LocationValidator implements Validator<Expeceted, Received> {
@Override
public boolean validate(Expeceted receivedObject, Received existingObject) {
return existingObject.getLocation().equals(receivedObject.getLocation());
}
}
Вы можете создать список таких валидаторов
List<Validator<Expeceted, Received>> validators = Arrays.asList(
new NameValidator(),
new LocationValidator()
);
И, наконец, ваш метод сравнения может просто перебрать все валидаторы.
public boolean compareObjects(Received recievedObject, Expeceted expecetedObject) {
for (Validator<Expeceted, Received> validation : validators) {
if (! validation.validate(expecetedObject, recievedObject)) {
return false;
}
}
return true;
}
Таким образом, вы можете позже просто добавить новые валидаторы и оставить метод сравнения без изменений.
Здесь Вы идете:
declare @string varchar(100)
select @string = 'sfdasadhfasjfdlsajflsadsadsdadsa'
SELECT LEN(@string) - LEN(REPLACE(@string, 'd', '')) AS D_Count
Если вы хотите сделать его немного более общим, вам следует разделить на длину того, что вы ищете. Например, так:
declare @searchstring varchar(10);
set @searchstring = 'Rob';
select original_string,
(len(orginal_string) - len(replace(original_string, @searchstring, ''))
/ len(@searchstring)
from someTable;
Это потому, что каждый раз, когда вы находите "Роб", вы удаляете три символа. Поэтому, когда вы удаляете шесть символов, вы находите "Роба" дважды.