使用 FilterMeta 过滤值不相等

Filtering for value not equal with FilterMeta

我正在尝试将 Primefaces Datatable 迁移到延迟加载,但我发现了一些过滤问题。对于非惰性 Datatable,过滤只是将所有值从数据库加载到某些 ArrayList,然后用 Java stream() 或其他任何方式过滤它们。但是对于 LazyDataModel,过滤器必须全部指定为 FilterMeta 对象,这些对象用于构建对 BD 的查询,因此只从数据库加载需要的数据。

听起来不错,简单的过滤很容易用这样的东西实现:

FilterMeta fm=FilterMeta.builder()
                .field("status")
                .filterValue(CustomerStatus.NEW)
                .matchMode(MatchMode.EQUALS)
                .build();

当我想实现更复杂的过滤器时,问题就来了。例如,想要过滤不同于而不是相等的值似乎是不可能的事情。查看可能的 MatchMode 值,没有不等运算符。唯一可能的值是:

CONTAINS     
ENDS_WITH    
EQUALS   
EXACT    
GLOBAL   
GREATER_THAN     
GREATER_THAN_EQUALS  
IN   
LESS_THAN    
LESS_THAN_EQUALS     
RANGE    
STARTS_WITH

我可以做一些逻辑体操,比如组合两个不同的过滤器 value>5value<5 来模仿 value!=5 行为,但它看起来像非常脏的代码。

知道我在这里遗漏了什么吗?明显的解决方案是 FilterMeta 实现某种 not()invert() 方法,但我还没有发现任何类似的东西。

谢谢!

在将其报告为功能请求后,Primefaces 11 中添加了新的否定运算符:https://www.primefaces.org/primefaces-11-0-0-released/