什么时候使用“ suppressWhen(...)”或“ filter(...)”?

时间:2018-07-14 19:57:37

标签: java javafx reactfx

我对“ 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”或类似的东西是否效率更高?

1 个答案:

答案 0 :(得分:2)

  

这里最有意义的是什么?

明确地使用suppressWhen,只是因为它是为该用例设计的。您可以直接提供绑定,而无需手动对其进行评估。使用filter是一种技巧,因为它是为流的每个元素而不是整个流决定的。

  

效率更高[?]

嗯,可以肯定的是,您需要自己测试执行速度,但是我敢肯定,使用suppressWhen仍然会更有效:

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