Как получить пользовательский объект для каждого идентификатора в Flowable - PullRequest
0 голосов
/ 14 марта 2020

У меня есть Flowable из списка идентификаторов, которые представляют идентификаторы пользователей в группе.

private val memberIdsFlowable: Flowable<List<String>> = groupFlowable
        .map { it.members }

Мне нужно позвонить

fun fetchUserFlowable(id: String): Flowable<User>

Для каждого идентификатора в списке и объединить их список пользователей Flowable<List<User>>

Я попробовал вот что:

private val membersFlowable = memberIdsFlowable
    .concatMap { list ->
        Flowable.fromIterable(list)
            .map { userRepository.fetchUserFlowable(it) }
    }

Но это приведет к Flowable<Flowable<User>>, а не Flowable<List<User>>, и если я добавлю toList() оператор, то это несоответствие типов:

   private val membersFlowable = memberIdsFlowable
    .concatMap { list ->
        Flowable.fromIterable(list)
            .map { userRepository.fetchUserFlowable(it) }
            .toList()
    }

1 Ответ

1 голос
/ 14 марта 2020

Вам также нужно просто concatMap внутри:

private val membersFlowable = memberIdsFlowable
    .concatMap { list ->
        Flowable.fromIterable(list)
            .concatMap { userRepository.fetchUserFlowable(it) }
    }

, чтобы лямбда возвращала Flowable<User> для каждого list.

РЕДАКТИРОВАТЬ: если вы хотите один List<User> для каждого List<String> в memberIdsFlowable внешняя операция должна быть map. Я менее уверен в его аргументации, но думаю, что-то вроде этого должно работать:

private val membersFlowable = memberIdsFlowable
    .map { list ->
        Flowable.fromIterable(list)
            .concatMap { userRepository.fetchUserFlowable(it) }
            .toList()
    }
...