基于帖子类型,我需要将项目推送到可观察列表。因此,如果不使用if
闭包(例如post.type != SomeType
),我的可观察列表为空。
因此,由于该即时消息始终从NoSuchElementException
接收Single.zip
这是我的示例代码
val observableList = mutableListOf<Single<Response>>()
if (post.type == SomeType) {
observableList.add(addNewObservable()) <-- adding API call to the lsit
}
return Single.zip(observableList) { arg -> arg } <-- Throws error NoSuchElementException
我认为我可以使用
post type != SomeType
:observableList.add(Single.just(Response(""))
这将正常工作。
那么,有没有更好的解决方案呢?我如何避免该错误?
最佳答案
如果您的列表可以合法地为空,则可能需要 Maybe
而不是Single
。一种方法是
val observableList = mutableListOf<Maybe<Response>>()
...
if (post.type == SomeType) {
observableList.add(addNewObservable().toMaybe())
}
...
return Maybe.zip(observableList) { arg -> arg }
空列表上的
Maybe.zip
应该返回一个Maybe
,该代码立即完成而不会发出任何东西。或其他解决方案:只需在调用
Single.zip
之前测试列表是否为空。实际上,这首先取决于您想要什么行为(除了不引发异常)。