- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
给定两个 Maybe
值,我如何将它们组合成一个 Maybe
将:
onSuccess()
每当源 Maybes
调用 onSuccess
onComplete()
每当 both 源 Maybes
调用 onComplete()
时?(参见 Scala 或 Vavr 中的 Option.orElse()
。)
例如,假设存在一个执行我想要的操作的 combine()
方法:
combine(Maybe.just(a), Maybe.empty()) ≍ Maybe.just(a)
combine(Maybe.empty(), Maybe.just(b)) ≍ Maybe.just(b)
combine(Maybe.empty(), Maybe.empty()) ≍ Maybe.empty()
combine(Maybe.never(), /*anything*/ ) ≍ /*the thing*/
combine(/*anything*/, Maybe.never()) ≍ /*the thing*/
起初我以为 amb()
& family 是我要找的东西,但是一旦任一源 Maybe
完成,这意味着如果第一个 Maybe
在没有值的情况下完成,您永远不会从第二个 Maybe
中获得值。
我现在正在用
Maybe.mergeArray(m1, m2).firstElement()
这似乎做我想做的事,但我不确定它是否正确,我不确定它是否是最干净的方法。 (例如,如果有一些延迟,它会在一个或另一个源执行时立即调用 onSuccess()
,还是会等待两个 onComplete()
?)
这是正确的吗?有没有更惯用的方法?
预计到达时间:我很乐意接受第一个值;我不需要等待两者都完成:
combine(Maybe.just(a), Maybe.just(b)) ≍ Maybe.just(/* a or b, don't care */)
(我可以想象我可能更喜欢其中一个的情况,并希望按参数的顺序来表明这一点,但在那种情况下,我怀疑顺序会比并行更好。)
最佳答案
有一种稍微不同的方法可能更接近您的定义。这将使用 Observable.switchMapMaybe()
:
Maps the upstream items into
MaybeSources
and switches (subscribes) to the newer ones while disposing the older ones (and ignoring their signals) and emits the latest success value of the current one if available while failing immediately if this Observable or any of the active innerMaybeSources
fail.
Observable.just(m1, m2).switchMapMaybe(m -> m).firstElement()
但是使用 Maybe.mergeArray(m1, m2).firstElement()
的方法也应该足够了。 firstElement()
运算符发出由 mergeArray()
可流动发出的第一个元素。这是无序的,因此没有关于任何 maybe 完成的信息。
关于java - 用于组合两个 Maybe 的 RxJava2 习语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288637/
场景如下: 我将我的应用程序运行所需的几个 .xml(某种配置)文件捆绑在一个 .jar 文件中。 jar 文件具有以下结构: settings-1.0.0.jar ˪ resources/ ˪
我是一名优秀的程序员,十分优秀!