为了账号安全,请及时绑定邮箱和手机立即绑定

.zip方法中可观察数的数量是否有限制?

.zip方法中可观察数的数量是否有限制?

神不在的星期二 2021-03-29 11:53:24
在Kotlin的zip方法中,用作参数的Observable数量似乎受到限制。如果这是正确的,最好的选择是什么?例如,当我使用9个参数时,它可以按预期工作。当我添加第十个参数时,我收到错误消息:无法推断该参数的类型。请明确指定Observable.zip(            //TODO: parameterize exchange symbols based on pair            methodOne() as Observable<Any>),            methodTwo() as Observable<Any>),            methodThree() as Observable<Any>),            methodFour() as Observable<Any>),            methodFive() as Observable<Any>),            methodSix() as Observable<Any>),            methodSeven() as Observable<Any>),            methodEight() as Observable<Any>),            methodNine() as Observable<Any>),            { oneResult, twoResult, threeResult, fourResult, fiveResult, sixResult, sevenResult, eightResult, nineResult ->                    //logic here applying computation to results            })            .subscribe(                    {},                    {                        println(String.format("Error: %s", it.message))                    })            .unsubscribe()}
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

RxJava仅使用最多支持9个不同的源zip。除此之外,您还必须使用zip(Iterable<ObservableSource>, Func<Object[],R>)方法并将Object[]back的每个元素转换为其各自的类型。

返回一个Observable,该数组发出指定combiner函数的结果,该函数应用于Iterable其他ObservableSources依次发出的项的组合。zip按严格顺序应用此功能,因此new发出的第一项ObservableSource将是应用到每个源ObservableSources发出的第一项的函数的结果;new发出的第二个项目ObservableSource将是每个ObservableSources发出的应用于第二个项目的函数的结果;等等。

ObservableSource<R>从zip返回的结果将调用发出最少项目的源onNextonNext调用次数ObservableSource

如果其中一个来源的资源比其他来源的资源短,而其他来源则更容易完成,那么操作员将按照其指定的顺序订阅其来源,并热切地完成操作。因此,其他来源可能永远无法运行完成(因此无法调用doOnComplete())。如果光源长度完全相同,也会发生这种情况。如果源A完成并且B已被消耗并即将完成,则操作员将检测到A将不再发送其他值,它将立即处置B。例如:

zip(Arrays.asList(range(1, 5).doOnComplete(action1), range(6, 5).doOnComplete(action2)), (a) -> a)

action1将被调用,但action2不会。要变通解决此终止属性,请使用doOnDispose(Action)using()在完成或dispose()调用的情况下使用或进行清理。关于方法签名的注意事项:由于Java不允许使用new创建通用数组T[],因此该操作符的实现必须创建一个Object[]replace。不幸的是,Function<Integer[], R>传递给方法会触发ClassCastException


查看完整回答
反对 回复 2021-04-14
  • 3 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信