我希望扩展DefaultGlazedListsFilterStrategy,以便可以应用过滤器策略,从而在数值比较期间忽略表中的“null”。在下表中,空值会导致数值比较出现问题。任何过滤器比较器都不能正确处理空值,因为在比较过程中总是必须考虑空值,因此在过滤列表中出现错误。在其中一个案例中,NullsFirstComparator和NullsLastComparator均不正确。
Filtered nattable with null values
如前所述,我尝试DefaultGlazedListsFilterStrategy,但无法过滤掉表中出现的“null”值。
- 编辑-
问题在于图像中第3列的数值比较(大小以字节为单位)。在图像中,2960以下的列中的条目为空。我使用DefaultComparator作为FilterComparator。
在一个“null”与1000进行比较的场景中(例如第2行),我们根据DefaultComparator实现得到的结果是-1,从而导致该null对象为真匹配。根据我的Nattable设计,第2-17行实际上是第1行的子行(树结构)。这又导致行1自动显示在结果列表中,因为它是父行。因此,过滤似乎被破坏,因为2960大于1000仍然显示在结果表中。
在这种情况下,我受到了过滤器比较器的限制,我可以选择Comparator.nullsFirst(new DefaultComparator())和Comparator.nullsLast(new DefaultComparator()),但是当比较符号反转时,这两个比较器都会崩溃(每个比较器只适用于'value'或>'value')。
理想情况下,我甚至不希望考虑过滤任何具有空值的行,因为空值最终会破坏数字过滤。
因此,我想到了实现一个过滤器策略,它将完全忽略这些空值。
1条答案
按热度按时间ndasle7k1#
您需要为您的特殊情况实现并注册一个自定义Filter比较器。默认比较器实际上只是字符串表示的比较。