“加入”观测量的RxJava列表

问题描述 投票:0回答:1

我一直在一遍又一遍地阅读文档再次,我无法找到我的情况下,正确的操作:

 return Observable.fromIterable(formIds)
                            .flatMap(new Function<String, Observable<List<Transmission>>>() {
                                @Override
                                public Observable<List<Transmission>> apply(String formId) {
                                    return getFormTransmissions(formId);
                                }
                            })
                            .toList()
                            .toObservable()
                            .map(new Function<List<List<Transmission>>, List<Transmission>>() {
                                @Override
                                public List<Transmission> apply(List<List<Transmission>> lists) {
                                    List<Transmission> transmissions = new ArrayList<>();
                                    for (List<Transmission> transmissionList : lists) {
                                        if (transmissionList != null) {
                                            transmissions.addAll(transmissionList);
                                        }
                                    }
                                    return transmissions;
                                }
                            });

正如你所看到的最后一个地图()我把所有的观测,并结合自己的内容。因为我觉得必须有一些rxjava功能来做到这一点,但我不能找到一个我不喜欢这一部分。

我会尽量解释这段代码的功能:从IDS对于他们中的每一个列表,获取每个ID传输的列表一旦所有这些完成的所有个人发送列表合二为一。有任何想法吗?

android observable rx-java rx-java2 rx-android
1个回答
2
投票

因此,基本上,你需要一个简单的地图,可以展平的结果。你可以用flatMapIterable做到这一点

return Observable.fromIterable(formIds)
        .flatMap(new Function<String, Observable<List<Transmission>>>() {
            @Override
            public Observable<List<Transmission>> apply(String formId) {
                return getFormTransmissions(formId);
            }
        }) // Observable<List<Transmission>>
        .flatMapIterable(new Function<List<Transmission>, List<Transmission>>() {
                @Override
                public List<Transmission> apply(List<Transmission> list) {
                    return list;
                }
            }) // Observable<Transmission>
        .toList() // Single<List<Transmission>>
        .toObservable(); // Observable<List<Transmission>>

即使是简单的与Java 8特性:

return Observable.fromIterable(formIds)
        .flatMap(formId -> getFormTransmissions(formId))  // Observable<List<Transmission>>
        .flatMapIterable(list -> list) // Observable<Transmission>
        .toList() // Single<List<Transmission>>
        .toObservable(); // Observable<List<Transmission>>

或者你可以在Java流使用flatMap:

return Observable.fromIterable(formIds)
        .flatMap(formId -> getFormTransmissions(formId))  // Observable<List<Transmission>>
        .toList() // Single<List<List<Transmission>>>
        .toObservable() // Observable<List<List<Transmission>>>
        .map(listOfList -> listOfList.stream().flatMap(Collection::stream)
                .collect(Collectors.toList()));  // Observable<List<Transmission>>
© www.soinside.com 2019 - 2024. All rights reserved.