Преобразование наблюдаемого в одиночный rx java

Я работаю со следующим кодом:

override fun getSportList(dCSServiceContext: DCSServiceContext): Single<SportsResponse> {
        return scribeService.getNavMenuItems(dCSServiceContext).map { navMenu ->
            SportsResponse(navMenu as NavMenu)
        }
    }

И getNavMenuItems выглядит так:

override fun getNavMenuItems(dCSServiceContext: DCSServiceContext): Observable<NavItem> {
        return getItems(getNavItemById(dCSServiceContext), dCSServiceContext)
    }

Дело в том, что мне нужно преобразовать этот Observable в Single, я использовал метод toSingle (), вот так:

override fun getSportList(dCSServiceContext: DCSServiceContext): Single<SportsResponse> {
        return scribeService.getNavMenuItems(dCSServiceContext).toSingle().map { navMenu ->
            SportsResponse(navMenu as NavMenu)
        }
    }

Но я получаю следующую ошибку:

Observable испустил слишком много элементов, потому что Observable испускает более одного элемента. Точно так же ожидайте, что «Observable не испускает никаких элементов», если Observable пуст.

Любые идеи?

Вы можете использовать оператор take(1), чтобы ограничить количество отправляемых элементов. Однако это не помогает, если никакие элементы не отправляются.

Bob Dalgleish 09.01.2019 23:09

Как упоминал @BobDalgleish, take(1) или first() требуют как минимум 1 элемента. У вас есть пара вариантов RxJava1 Observable::firstOrDefault или, если вы используете RxJava2 (если нет, почему нет), вы можете использовать Observable::firstElement(), который возвращает Maybe. Для меня, если вы не можете вернуть никакие элементы, Maybe более декларативен.

Mark Keen 10.01.2019 00:16

Да, проблема решена, но теперь проблема в том, что я получаю не все предметы, а только первый.

rasilvap 10.01.2019 16:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
1 662
0

Другие вопросы по теме