Вы можете использовать что-то вроде этого:
interface Employee{
public String getName();
int getBatchId();
}
interface Filter{
boolean matches(Employee e);
}
public Filter byName(final String name){
return new Filter(){
public boolean matches(Employee e) {
return e.getName().equals(name);
}
};
}
public Filter byBatchId(final int id){
return new Filter(){
public boolean matches(Employee e) {
return e.getBatchId() == id;
}
};
}
public Employee findEmployee(Filter sel){
List<Employee> allEmployees = null;
for (Employee e:allEmployees)
if (sel.matches(e))
return e;
return null;
}
public void usage(){
findEmployee(byName("Gustav"));
findEmployee(byBatchId(5));
}
Если вы выполняете фильтрацию по SQL-запросу, вы бы использовали интерфейс Filter
для составления предложения WHERE.
Преимущество этого подхода в том, что вы можете легко комбинировать два фильтра с:
public Filter and(final Filter f1,final Filter f2){
return new Filter(){
public boolean matches(Employee e) {
return f1.matches(e) && f2.matches(e);
}
};
}
и используйте это так:
findEmployee(and(byName("Gustav"),byBatchId(5)));
То, что вы получаете, похоже на Criteria
API в Hibernate.