【问题标题】:How to fetch User object for each id in Flowable<List<String>>如何为 Flowable<List<String>> 中的每个 id 获取用户对象
【发布时间】:2020-03-13 22:21:25
【问题描述】:

我有一个代表组中用户 ID 的 ID 列表的 Flowable。

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

我需要打电话

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

对于列表中的每个 id 并将它们组合成用户列表Flowable&lt;List&lt;User&gt;&gt;

我试过的是这样的:

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

但它会导致Flowable&lt;Flowable&lt;User&gt;&gt; 而不是Flowable&lt;List&lt;User&gt;&gt;,如果我添加toList() 运算符,那么这是类型不匹配:

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

【问题讨论】:

    标签: android kotlin rx-java rx-java2


    【解决方案1】:

    你只需要在里面也有concatMap

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

    因此 lambda 为每个 list 返回 Flowable&lt;User&gt;

    编辑:如果您希望memberIdsFlowable 中的每个List&lt;String&gt; 都有一个List&lt;User&gt;,则外部操作应为map。我不太确定它的论点,但我认为这样的事情应该可行:

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

    【讨论】:

    • 但是 membersFlowable 现在是 Flowable&lt;User&gt; 类型,而我需要它是 Flowable&lt;List&lt;User&gt;&gt;。也许我解释得不好,基本上我需要用我的fun fetchUserFlowable(id: String): Flowable&lt;User&gt;memberIdsFlowable : Flowable&lt;List&lt;String&gt;&gt;转换为Flowable&lt;List&lt;User&gt;&gt;
    • toList() 返回一个Single&lt;List&lt;T&gt;&gt;,所以外部操作应该是concatMapSingle(或switchMapSingle)而不是map
    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    相关资源
    最近更新 更多