Java 8 带多个过滤器的Vaadin 8网格
我想根据两个过滤标准过滤网格内容,因此我有以下内容Java 8 带多个过滤器的Vaadin 8网格,java-8,vaadin8,Java 8,Vaadin8,我想根据两个过滤标准过滤网格内容,因此我有以下内容 ListDataProvider<Person> dataProvider = (ListDataProvider<Person>) grid.getDataProvider(); SerializablePredicate<Person> filter = new SerializablePredicate<Person>() { @Override public boolean tes
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);
ListDataProvider dataProvider=(ListDataProvider)grid.getDataProvider();
SerializablePredicate筛选器=新的SerializablePredicate(){
@凌驾
公共布尔测试(个人){
返回false;
}
};
过滤和(Person->Person.getAge()==30);
和(Person->Person.getName().equalsIgnoreCase(“bernd”);
dataProvider.setFilter(filter);
}
但是,网格没有显示任何内容。您的连词的计算结果始终为
false
,因为它的建模方式如下:
false && Person.getAge() == 30 && Person.getName().equalsIgnoreCase("bernd")
您可以在第一个筛选器中使用returntrue
,也可以使用它并以Person.getAge()==30开始
第二个问题是你忽略了连接的结果。除此之外,方法和
在谓词
中定义,并返回不可序列化的谓词
。解决方案是使用一个简单的&&
SerializablePredicate<Person> filter = p -> p.getAge() == 30 &&
p.getName().equalsIgnoreCase("bernd");
SerializablePredicate过滤器=p->p.getAge()==30&&
p、 getName().equalsIgnoreCase(“bernd”);
您的连词的计算结果始终为false
,因为它的建模方式如下:
false && Person.getAge() == 30 && Person.getName().equalsIgnoreCase("bernd")
您可以在第一个筛选器中使用returntrue
,也可以使用它并以Person.getAge()==30开始
第二个问题是你忽略了连接的结果。除此之外,方法和
在谓词
中定义,并返回不可序列化的谓词
。解决方案是使用一个简单的&&
SerializablePredicate<Person> filter = p -> p.getAge() == 30 &&
p.getName().equalsIgnoreCase("bernd");
SerializablePredicate过滤器=p->p.getAge()==30&&
p、 getName().equalsIgnoreCase(“bernd”);
有两个不同的问题。
第一个:
功能
default Predicate<T> and(Predicate<? super T> other)
默认谓词和(谓词)有两个不同的问题。
第一个:
功能
default Predicate<T> and(Predicate<? super T> other)
默认谓词和(PredicateI刚刚使用了return true。结果是筛选器没有得到计算,因为我说过您忽略了连接词的返回值。请参阅我的编辑并尝试使用新的SerializablePredicate
。顺便说一句,我不建议将lambda参数命名为与您的类完全相同的参数。这可能会让人困惑,因为可能认为您访问了该类。我刚刚使用了return true。结果是,筛选器没有得到计算,因为我说过您忽略了连接词的返回值。请参阅我的编辑,并尝试使用新的SerializablePredicate
。顺便说一句,我不建议将lambda参数命名为与您的类完全相同的参数。这是错误的你可能会感到困惑,因为你可能会认为你访问了这个类。