我一直在一遍又一遍地阅读文档再次,我无法找到我的情况下,正确的操作:
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传输的列表一旦所有这些完成的所有个人发送列表合二为一。有任何想法吗?
因此,基本上,你需要一个简单的地图,可以展平的结果。你可以用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>>