Rxjava2: использование плоской карты

У меня есть сценарий ниже, в котором, как только я получаю ответ службы от zip (getHardwareInfo), мне нужно сделать еще один вызов службы (getSoftwareInfo ()). Таким образом, в основном getSoftwareInfo () вызывается только в случае успешного выполнения getHardwareInfo ().

-Теперь я хочу добавить условие, при котором getSoftwareInfo () вызывается не только после успешного выполнения getHardwareInfo, но и при выполнении условия, то есть isChristmas (). Я изменил свой код с версии 1 на версию 2, и он работает. Я отладил это и, кажется, работает нормально. Не уверен, что делаю это правильно, так как я новичок в rxjava. Любая помощь будет оценена по достоинству.

Версия 1:

public Single<ComputerData> getComputerData(){
 return getHardwareInfo().observeOn(AndroidSchedulers.mainThread())
           .onErrorREsumeNext(throwable->{ 
            return Single.error() 
        }).flatMap(hardwareInfo->{
           //do something with hardwareInfo
           return getSoftwareInfo();
        .observeOn(AndroidSchedulers.mainThread())
        .onErrorResumeNext(throwable->{
         return Single.error());
         })
         .flatMap(softwareInfo->{
           //do something with softwareInfo
         });

версия 2:

public Single<ComputerData> getComputerData(){
 return getHardwareInfo().observeOn(AndroidSchedulers.mainThread())
           .onErrorREsumeNext(throwable->{ 
            return Single.error() 
        }).flatMap(hardwareInfo->{
           //do something with hardwareInfo
          if (isChristmas()){
           return getSoftwareInfo()
                 .observeOn(AndroidSchedulers.mainThread());
                 .onErrorResumeNext(throwable->{
                  return Single.error());
                  })
                  .flatMap(sofwareInfo->{
                  //do something with softwareInfo
                  });
          } else{
                //do something else.
           }
         });
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
69
1

Ответы 1

onErrorResumeNext не нужен, если вы просто хотите вернуть ошибку.

Это оно:

getHardwareInfo()
    .flatMap(hi -> getSoftwareInfo())
    .filter(si -> isChristmas());

Вам просто нужно добавить подходящие планировщики

Также я хотел бы сделать что-нибудь еще (вернуть значение), если! IsChristmas (). Я забыл добавить это в свой код. Я отредактировал свой ответ. Насколько я понимаю, это невозможно сделать с помощью фильтра.

Albertano Santacruz 17.12.2018 21:10

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