Java InMemoryDataProvider类型中的方法addFilter(SerializablePredicate)不适用于参数((desc)->{})
我正在玩Vaadin,现在我正在尝试向网格添加一个过滤器,通过JPA和MySQL数据库获取数据。这应该是非常简单的,我严格遵循的例子显示。在我收到这个同名错误消息之前,一切似乎都进展顺利 这就是我设置类数据通信的方式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
@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因为花括号引入了函数接口方法的主体,您需要从中返回