RxJava2用于组合两个Maybes的习语
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了RxJava2用于组合两个Maybes的习语,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1742字,纯文字阅读大概需要3分钟。
内容图文
给定两个Maybe值,我如何将它们组合成一个可能会:
>只要源Maybes中的任何一个调用onSuccess,就调用onSuccess()
>只要两个源Maybes都调用onComplete(),就调用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()&家庭是我正在寻找的,但是一旦源可能完成就完成了,这意味着如果第一个Maybe没有值完成,你永远不会从第二个Maybe获得值.
现在我正在使用
Maybe.mergeArray(m1, m2).firstElement()
这似乎做我想要的,但我不确定它是否正确,我不确定这是最干净的方法. (例如,如果有一些延迟,它会在一个或另一个源执行时立即调用onSuccess(),还是等待onComplete()s?)
它是否正确?有更惯用的方法吗?
ETA:我很高兴获得第一个价值;我不需要等待两者都完成:
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()可流动的第一个元素.这个是无序的,因此没有关于任何maybes完成的信息.
内容总结
以上是互联网集市为您收集整理的RxJava2用于组合两个Maybes的习语全部内容,希望文章能够帮你解决RxJava2用于组合两个Maybes的习语所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。