何时使用 "suppressWhen(...)" 或 "filter(...)"?

When to use "suppressWhen(...)" or "filter(...)"?

我对 "suppressWhen(...)" 和 "filter(...)" 这两种方法有疑问,如果在上下文中使用它们有什么不同,例如:

我有一个布尔值 属性 比如:

BooleanProperty bp = new SimpleBooleanProperty();

我有一个值流,例如:

var.values()...

如果 BooleanProperty bp 是假的,我想过滤流时有什么区别吗:

var.values().suppressWhen(bp.not())...

var.values().filter(val -> bp.getValue())...

好吧,很明显 "suppressWhen" 创建了一个 "SuspendedWhenStream" 的实例并使用了 "SuspendableEventStream" 所以也许最好问问这里什么最有意义?

创建一个额外的 "SuspendableEventStream" 或类似的东西是否更无效率?

What would make the most sense here?

明确使用 suppressWhen,只是因为它是为该用例设计的。您可以直接提供绑定,无需手动评估。使用 filter 有点像 hack,因为它旨在决定流中的每个元素,而不是整个流。

Is it more [...] efficient[?]

嗯,为了绝对确定,您需要自己测试执行速度,但我很确定使用 suppressWhen 仍然更有效:

即使创建新流(或一般的新对象)可能首先需要额外的资源,这些资源也会在以后保存。使用 filter,必须为流中的每个新事件元素评估条件,但使用 suppressWhen,只会在需要时(自动)评估它。