Как правильно собрать Maybe RxJava2?

159
24 октября 2018, 06:30

Работаю с Room есть вот такой метод

@Query("SELECT * FROM mytable WHERE pnr = :iPnr")
abstract Maybe<UserPnrDbObject> getBy(String iPnr);

и есть вот такой метод

public Maybe<UserActivePnr> getMaybeBy(String iPnr)
{
    return getBy(iPnr)//
                      .flatMap(new Function<UserPnrDbObject, MaybeSource<UserPnrDbObject>>()
                      {
                          @Override
                          public MaybeSource<UserPnrDbObject> apply(final UserPnrDbObject iUserPnrDbObject) throws Exception
                          {
                              return concatInfoToUser(iUserPnrDbObject);
                          }
                      })//
                      .map(new Function<UserPnrDbObject, UserActivePnr>()
                      {
                          @Override
                          public UserActivePnr apply(final UserPnrDbObject iUserPnrDbObject) throws Exception
                          {
                              return PnrMapper.fromDb(iUserPnrDbObject);
                          }
                      })//
                      .flatMap(new Function<UserActivePnr, MaybeSource<UserActivePnr>>()
                      {
                          @Override
                          public MaybeSource<UserActivePnr> apply(final UserActivePnr iPnr) throws Exception
                          {
                              return Maybe.just(iPnr);
                          }
                      });
}

что тут должно происходить: нужно получить обьект с БД добавить к нему дополнительную информацию (метод Maybe<UserPnrDbObject> concatInfoToUser(UserPnrDbObject iObj)) и потом конвертировать это все из UserPnrDbObject в UserActivePnr и обернуть в Maybe чтоб получить в итоге Maybe<UserActivePnr> вот и все

Вопрос вот в чем, метод который я описал выше выполняет все эти действия и вроде бы все хорошо работает(может конечно можно как то лучше это описать?) , но если я удаляю последнюю обертку с этого метода, чтоб получилось вот так

public Maybe<UserActivePnr> getMaybeBy(String iPnr)
{
    return getBy(iPnr)//
                      .flatMap(new Function<UserPnrDbObject, MaybeSource<UserPnrDbObject>>()
                      {
                          @Override
                          public MaybeSource<UserPnrDbObject> apply(final UserPnrDbObject iUserPnrDbObject) throws Exception
                          {
                              return concatInfoToUser(iUserPnrDbObject);
                          }
                      })//
                      .map(new Function<UserPnrDbObject, UserActivePnr>()
                      {
                          @Override
                          public UserActivePnr apply(final UserPnrDbObject iUserPnrDbObject) throws Exception
                          {
                              return PnrMapper.fromDb(iUserPnrDbObject);
                          }
                      });
}

то тоже все работает...

Как так получается? Мой метод Maybe<UserActivePnr> getMaybeBy(String iPnr) возвращает Maybe , последний метод map() который я выполняю в цепочке должен по идее вернуть UserActivePnr , но он как то возвращает Maybe<UserActivePnr>

Что не так?

READ ALSO
Проблема перевода byte[] в String[] или в String. JAVA

Проблема перевода byte[] в String[] или в String. JAVA

Я посылаю запрос на сервер, он мне отправляет String[] или String с помощью byte[]Моя задача - преобразовать этот массив байтов хоть в что-нибудь читаемое

164
LiveData постит только последнее значение

LiveData постит только последнее значение

Подписываюсь на LiveData которая находится во ViewModel во фрагменте

168
Ошибка при клике на ListView, почему? [дубликат]

Ошибка при клике на ListView, почему? [дубликат]

На данный вопрос уже ответили:

219
Перерисовка изображения при нажатии JButton

Перерисовка изображения при нажатии JButton

Хочу, чтобы при нажатии кнопки "UP" аймэдж "gena" стирался и появлялся в новом месте - то есть x = x + 100Но при нажатии кнопки ничего не происходит

174