Вы можете реализовать определенные функции поиска для каждого атрибута, например
для возраста возможных фильтров 'Equal'
, 'Greater than'
или 'Less than'
Для фамилии фильтр 'is equal'
, 'begins with'
или 'ends with'.
- Для пола
'is male'
Вы можете добавитьчто-то вроде ниже для вашего класса Employee:
public static Predicate<Employee> ageEQ(int a) {
return e -> e.getAge() == a;
}
public static Predicate<Employee> ageGT(int a) {
return e -> e.getAge() > a;
}
public static Predicate<Employee> ageLT(int a) {
return e -> e.getAge() < a;
}
public static Predicate<Employee> isMale() {
return e -> e.getGender().equals("M");
}
public static Predicate<Employee> lastNameEQ(String name) {
return e -> e.getLastName().equals(name);
}
public static Predicate<Employee> lastNameStartsWith(String name) {
return e -> e.getLastName().startsWith(name);
}
И список сотрудников:
List<Employee> list = new ArrayList<>();
list.add(new Employee(1,22,"M","Aaa","Bar"));
list.add(new Employee(2,33,"F","Ccc","Ddd"));
list.add(new Employee(3,44,"M","Eee","Fff"));
list.add(new Employee(4,55,"F","Ggg","Hhh"));
list.add(new Employee(5,66,"F","Mmm","Nnn"));
, чтобы отфильтровать, например, всех сотрудников старше 40 лет и женщин:
list.stream()
.filter(Employee.ageGT(40).and(Employee.isMale().negate()))
.forEach(System.out::println);
Предположим, что ваш запрос похож на? Age> 40 & male = false ...