基于帖子类型,我需要将项目推送到可观察列表。因此,如果不使用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之前测试列表是否为空。

实际上,这首先取决于您想要什么行为(除了不引发异常)。

10-08 16:02