Java InMemoryDataProvider类型中的方法addFilter(SerializablePredicate)不适用于参数((desc)->{})

Java InMemoryDataProvider类型中的方法addFilter(SerializablePredicate)不适用于参数((desc)->{}),java,filter,java-8,vaadin,vaadin-grid,Java,Filter,Java 8,Vaadin,Vaadin Grid,我正在玩Vaadin,现在我正在尝试向网格添加一个过滤器,通过JPA和MySQL数据库获取数据。这应该是非常简单的,我严格遵循的例子显示。在我收到这个同名错误消息之前,一切似乎都进展顺利 这就是我设置类数据通信的方式 @Autowired CoreRepository crp; @Id("descriptionFilter") private TextField descriptionFilter; List<db> list = c

我正在玩Vaadin,现在我正在尝试向网格添加一个过滤器,通过JPA和MySQL数据库获取数据。这应该是非常简单的,我严格遵循的例子显示。在我收到这个同名错误消息之前,一切似乎都进展顺利

这就是我设置类数据通信的方式

    @Autowired
    CoreRepository crp;     
    @Id("descriptionFilter")
    private TextField descriptionFilter;
    List<db> list = crp.findAll();
    ListDataProvider<db> ldp = DataProvider.ofCollection(list);
    grid.setDataProvider(ldp);
以及过滤:

    /* Filtration */
    descriptionFilter.addValueChangeListener( e->
    {
        Notification.show(e.getValue());

        ldp.addFilter(desc -> 
        {
            StringUtils.containsIgnoreCase(desc.getFileDescription(), descriptionFilter.getValue()); //<< I get the error here
        });
    });     
    descriptionFilter.setValueChangeMode(ValueChangeMode.EAGER);
然而,我得到了这个错误,我不明白这是怎么发生的

中的addFilterSerializablePredicate方法 InMemoryDataProvider类型不适用于 参数desc->{}

我可能做错了什么

它必须是SerializablePredicate,因此必须返回布尔值:

ldp.addFilter(desc -> 
{
    return StringUtils.containsIgnoreCase(desc.getFileDescription(), descriptionFilter.getValue());
})
或者更简单:

ldp.addFilter(desc -> StringUtils.containsIgnoreCase(desc.getFileDescription(), descriptionFilter.getValue()));
它必须是SerializablePredicate,因此必须返回布尔值:

ldp.addFilter(desc -> 
{
    return StringUtils.containsIgnoreCase(desc.getFileDescription(), descriptionFilter.getValue());
})
或者更简单:

ldp.addFilter(desc -> StringUtils.containsIgnoreCase(desc.getFileDescription(), descriptionFilter.getValue()));

第一个解决方案奏效了。。。第二个给出了同样的错误。非常感谢。你有没有试过第二个不带花括号的?{}是的,就是这么做了,而且奏效了。为什么花括号在这里很重要?@JoffJoff因为花括号引入了函数接口方法的主体,您需要从中返回第一个有效的解决方案。。。第二个给出了同样的错误。非常感谢。你有没有试过第二个不带花括号的?{}是的,就是这么做了,而且奏效了。为什么花括号在这里很重要?@JoffJoff因为花括号引入了函数接口方法的主体,您需要从中返回