Работаю с 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>
Что не так?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости