【问题标题】:Combining parent details requests in RxJava在 RxJava 中组合父详细信息请求
【发布时间】:2016-09-30 16:29:47
【问题描述】:

我有一个从服务器获取的 A 类对象列表。除其他项目外,此类 A 还包含一个 ID 列表。然后使用这些 ID 检索 B 类对象的列表。

我有返回的函数

Observable<List<A>>

Observable<B>

就位。

我想使用 RxJava 来检索 A 对象的列表,然后为每个 A 对象检索 B 对象的列表,并将 B 对象分配给它们所属的 A 对象,所以我想最终得到类似这样的一些复合对象的列表:

class Details {
    public A a;
    public List<B> listOfB;
}

然后返回

Observable<List<Details>>

谢谢!

【问题讨论】:

    标签: android rx-java


    【解决方案1】:

    假设,如您所述,您具有以下功能:

    Observable<List<A>> getAList()
    

    Observable<B> getB(Long id)
    

    基本上你需要使用Observable.from 方法将列表解耦为单个元素,当然还有Observable.flatMap 来转换Observable's。

    创建一个辅助函数以从A 的列表中获取B 的列表:

    public Observable<List<B>> getBFromAList(List<Long> idList) {
        return Observable.from(idList)
                .flatMap(new Func1<Long, Observable<B>>() {
                    @Override
                    public Observable<B> call(Long id) {
                        return getB(id);
                    }
                })
                .toList();
    }
    

    及主要功能:

    public Observable<List<Details>> getDetailsList() {
        return getAList()
                .flatMap(new Func1<List<A>, Observable<A>>() {
                    @Override
                    public Observable<A> call(List<A> aList) {
                        return Observable.from(aList);
                    }
                }).flatMap(new Func1<A, Observable<Details>>() {
                    @Override
                    public Observable<Details> call(A a) {
                        return getBFromAList(a.idList)
                                .zipWith(Observable.just(a), new Func2<List<B>, A, Details>() {
                                    @Override
                                    public Details call(List<B> bs, A a) {
                                        Details details = new Details();
                                        details.a = a;
                                        details.listOfB = bs;
                                        return details;
                                    }
                                });
                    }
                }).toList();
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-07
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2021-11-29
      • 2017-01-16
      • 1970-01-01
      相关资源
      最近更新 更多