There are two different problems.
First one:
The function
default Predicate<T> and(Predicate<? super T> other)
returns a new predicate.
ListDataProvider<Person> dataProvider = (ListDataProvider<Person>)
grid.getDataProvider();
SerializablePredicate<Person> filter = new SerializablePredicate<Person>() {
@Override
public boolean test(Person Person) {
return true;
}
};
filter = filter.and(Person -> Person.getAge() == 30);
filter = filter.and(Person -> Person.getName().equalsIgnoreCase("bernd"));
dataProvider.setFilter(filter);
The other problem is, that ListDataProvider expected a SerializablePredicate.
You can extend the SerializiablePredicate
public interface ExtendedSerializablePredicate<T> extends SerializablePredicate<T> {
default ExtendedSerializablePredicate<T> and(ExtendedSerializablePredicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
}
now you can use this:
ListDataProvider<Person> dataProvider = (ListDataProvider<Person>)
grid.getDataProvider();
ExtendedSerializablePredicate<Person> filter = new ExtendedSerializablePredicate<Person>() {
@Override
public boolean test(Person Person) {
return true;
}
};
filter = filter.and(Person -> Person.getAge() == 30);
filter = filter.and(Person -> Person.getName().equalsIgnoreCase("bernd"));
dataProvider.setFilter(filter);