RxJava + Kotlin - Использование одного наблюдаемого в создании другого - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь выяснить, как использовать результат одного наблюдаемого в другом. У меня есть сервисный вызов, который возвращает Observable<List<User>>, и после этого у меня есть другой сервисный вызов, где я хочу использовать идентификатор каждого пользователя (user.getId()) в списке предыдущих наблюдаемых для создания списка идентификаторов List<Int>. Затем этот список int будет передан на второй вызов службы. Как мне этого добиться?

Надеюсь, вопрос имеет смысл. Дайте мне знать, если мне нужно уточнить себя.

1 Ответ

0 голосов
/ 30 октября 2018

Я думаю, что вы хотите flatMap. flatMap является оператором, где вы можете испустить другую наблюдаемую информацию, основанную на элементе наблюдаемой.

val obs: Observable<List<User>>
obs.flatMap { users: List<User> -> 
    serviceWhichEmitsObservable.doMagic(users)
}

flatMap-Operator

Если вы хотите, чтобы пользователи отдельно, вы можете конвертировать Observable> -> Obsersvable с fromIterable. Смотрите этот ответ: RxJava - получить каждый элемент в списке

val obs: Observable<List<User>>
obs
    .flatMap { users: List<User> -> Observable.fromIterable(users)
    .flatMap { user: User -> serviceWhichEmitsObservable.doMagic(user) }

После перечитывания вашего вопроса, я думаю, что вы хотите это: List<User> -> List<Integer> и передать этот список в службу. Вы должны сначала отобразить список. Это не имеет ничего общего с RX. Тем не менее:

val obs: Observable<List<User>>
obs
    .map { users: List<User> -> users.map { it.id } }
    .flatMap { userIds: List<Integer> -> serviceWhichEmitsObservable.doMagic(userIds) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...