我有一个表对象,该对象具有用于过滤事件的三列。
具有假设值的三列:
Component Event SubEvent
A B C
A B D
我正在尝试创建一个事件流,该事件流过滤掉第一行而不是第二行。我已经尝试了几种不同的方法来获得不同的结果。
return events -> save(events.stream().filter(event ->
A != event.getComponent() &&
B != event.getEventType() &&
C != event.getEventSubType())
.collect(Collectors.toList())
这就像一个“或”,并过滤出两行。即如果分量== A || 事件== B || subEvent == C
我真正想要的是
IF(组件== A &&事件== B && subEvent == C)然后过滤掉,但保留其他所有内容。
我已将过滤器修改为
.filter(event -> C != event.getEventSubType())
但是我冒着错过其他事件的风险,其中subEvent == C,但是Component和Event值与A和B不匹配。
赞赏有关最佳实践的任何其他策略建议,以建立这种复合筛选器。谢谢!
请注意,skip(1)
允许跳过流的第一个元素。
关于您的问题,您的实际过滤器:
filter(event ->
A != event.getComponent() &&
B != event.getEventType() &&
C != event.getEventSubType())
表示仅将符合这些three
条件的元素保留在流中。
看这些行:
组件事件子事件 ABC ABD
第一行的条件为假。因此不保留该元素。但是第二行的条件也为假,因为一系列逻辑与的条件为真,仅当所有条件都为真且其中两个条件都不为真时:
A != event.getComponent() --> false
B != event.getEventType() --> false
C != event.getEventSubType() --> true
因此,这些线中没有一个被保留。
您应该写的是:
filter(event ->
!(A == event.getComponent() &&
B == event.getEventType() &&
C == event.getEventSubType()))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句