RxJava zip с пустым списком наблюдаемых - PullRequest
0 голосов
/ 15 апреля 2019

В зависимости от типа записи мне нужно добавить элемент в список наблюдаемых.Так что в случае, когда 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(""))

И этобудет работать нормально.

Так есть ли лучшее решение для этого?Как я могу избежать этой ошибки?

1 Ответ

1 голос
/ 16 апреля 2019

Если ваш список на законных основаниях может быть пустым, может быть, вы хотите 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.

Это действительно зависит от того, какое поведение вы хотите (за исключением исключения исключений).

...