Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 带多个过滤器的Vaadin 8网格_Java 8_Vaadin8 - Fatal编程技术网

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")
您可以在第一个筛选器中使用return
true
,也可以使用它并以
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")
您可以在第一个筛选器中使用return
true
,也可以使用它并以
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参数命名为与您的类完全相同的参数。这是错误的你可能会感到困惑,因为你可能会认为你访问了这个类。