У меня есть пара вызовов api, чтобы сделать (последовательно, асинхронно), а некоторые из них возвращают списки. Интерфейс api приведен ниже.
@GET("/users/settings")
Observable<UserWrapper> getUserSettings();
@GET("/{username}/collections")
Observable<List<Item>> getItems(@Path("username") String userName);
@GET("/item/{id}")
Observable<ItemInfo> getItemInfo(@Path("id") int id);
@GET("/{username}/friends")
Observable<List<Friend>> getFriends(@Path("username") String userName);
Вот что я хочу сделать последовательно:
- Получить
UserWrapper
, вызвавgetUserSettings()
- Сохраните пользователя, позвонив
saveUser(userWrapper)
- Получить пользовательские элементы, вызвав
getItems(userWrapper.getUserName())
- Получить информацию о каждом элементе, вызвав
getItemInfo(item.getId())
- Сохраните каждый
itemInfo
, вызвавsaveItem(itemInfo)
- Получить друзей пользователей, позвонив
getFriends(userWrapper.getUserName())
- Сохраните каждого друга, позвонив
saveFriend(friend)
Теперь я новичок в RxJava и не знаю, как обрабатывать списки. Я наблюдал за одним из слайдов Jake Wharton и обнаружил, что он использует функцию flattenList()
, но я не знаю ее определения. Было бы здорово, если бы вы могли помочь составить эту цепочку.
Обновление 1
Это до сих пор я получил:
mApiService.getUserSettings()
.map(this::saveUser)
.flatMap(userWrapper -> mApiService.getItems(userWrapper.getUserName()));
.flatMapIterable( ? "How to iterate for each item" ? );
Обновление 2
Я пытаюсь написать что-то вроде этого
mApiService.getUserSettings()
.map(this::saveUser)
.flatMap(userWrapper -> mApiService.getItems(userWrapper.getUserName()))
.someMethodToIterateThroughEachItem(item -> mApiService.getItemInfo(item))
.map(this::saveItem)
.someMethodThatCanCallUserWrapperAgain(userWrapper -> mApiService.getFriends(userWrapper.getUserName()))
.someMethodToIterateThoughEachFriend(friend -> saveFriend(friend))