何时使用 "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
,只会在需要时(自动)评估它。
我对 "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
,只会在需要时(自动)评估它。