0

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

4

1 回答 1

2

这里最有意义的是什么?

明确地使用suppressWhen,仅仅是因为它是为那个用例设计的。您可以直接提供绑定,而无需手动评估它。使用filter将是一种 hack,因为它旨在为流的每个元素做出决定,而不是为整个流做出决定。

是不是更 [...] 有效 [?]

好吧,绝对可以肯定,您需要自己测试执行速度,但我很确定 usingsuppressWhen仍然更有效:

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

于 2018-07-14T21:12:18.343 回答