我对“ 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”或类似的东西是否效率更高?
答案 0 :(得分:2)
这里最有意义的是什么?
明确地使用suppressWhen
,只是因为它是为该用例设计的。您可以直接提供绑定,而无需手动对其进行评估。使用filter
是一种技巧,因为它是为流的每个元素而不是整个流决定的。
效率更高[?]
嗯,可以肯定的是,您需要自己测试执行速度,但是我敢肯定,使用suppressWhen
仍然会更有效:
即使创建新流(或通常是新对象)可能首先需要额外的资源,这些资源也会在以后保存。使用filter
,必须为流中的每个新事件元素评估条件,但是使用suppressWhen
,仅在需要时才自动评估条件。