我想根据两个过滤标准过滤网格内容,因此我有以下
ListDataProvider<Person> dataProvider = (ListDataProvider<Person>) grid.getDataProvider();
SerializablePredicate<Person> filter = new SerializablePredicate<Person>() {
@Override
public boolean test(Person Person) {
return false;
}
};
filter.and(Person -> Person.getAge() == 30);
filter.and(Person -> Person.getName().equalsIgnoreCase("bernd"));
dataProvider.setFilter(filter);
}
然而,网格没有显示任何内容。
答案 0 :(得分:2)
您的联合始终评估为false
,因为它的建模方式如下:
false && Person.getAge() == 30 && Person.getName().equalsIgnoreCase("bernd")
您可以在第一个过滤器中使用返回true
,也可以省略它并以Person.getAge() == 30
开头。
第二个问题是你忽略了你的结合的结果。除此之外,方法and
在Predicate
中定义,并返回不可序列化的Predicate
。解决方案是使用简单的&&
。
SerializablePredicate<Person> filter = p -> p.getAge() == 30 &&
p.getName().equalsIgnoreCase("bernd");