Java 何时使用;suppressWhen(…)”字样;或;过滤器(…)“;?

Java 何时使用;suppressWhen(…)”字样;或;过滤器(…)“;?,java,javafx,reactfx,Java,Javafx,Reactfx,我对“suppressWhen(…)”和“filter(…)”这两种方法有疑问,如果在上下文中使用它们会有任何区别,例如: 我有一个布尔属性,如: BooleanProperty bp = new SimpleBooleanProperty(); 我有一系列的价值观,比如: var.values()... 如果BooleanProperty bp为false,我想过滤流时有什么区别吗 var.values().suppressWhen(bp.not())... 或 很明显,“suppres

我对“suppressWhen(…)”和“filter(…)”这两种方法有疑问,如果在上下文中使用它们会有任何区别,例如:

我有一个布尔属性,如:

BooleanProperty bp = new SimpleBooleanProperty();
我有一系列的价值观,比如:

var.values()...
如果
BooleanProperty bp
为false,我想过滤流时有什么区别吗

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

很明显,“suppressWhen”创建了一个“SuspendedHenstream”的实例,并使用了一个“SuspendableEventStream”,所以最好问问这里什么最有意义

创建一个额外的“SuspendableEventStream”或类似的东西是否更无效

这里什么最有意义

明确使用
suppressWhen
,仅仅因为它是为该用例设计的。您可以直接提供绑定,而无需手动计算。使用
filter
将是一种黑客行为,因为它是为流的每个元素而设计的,而不是为整个流

它是否更[…]高效[?]

当然,您需要自己测试执行速度,但我非常确定使用
suppressWhen
更有效:

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

这里什么最有意义

明确使用
suppressWhen
,仅仅因为它是为该用例设计的。您可以直接提供绑定,而无需手动计算。使用
filter
将是一种黑客行为,因为它是为流的每个元素而设计的,而不是为整个流

它是否更[…]高效[?]

当然,您需要自己测试执行速度,但我非常确定使用
suppressWhen
更有效:


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

详细信息可以在另一个EventStream观察suppressWhen条件或属性的“Suspendable”界面中看到。详细信息可以在另一个EventStream观察suppressWhen条件或属性的“Suspendable”界面中看到。
var.values().filter(val -> bp.getValue())...