У меня есть следующие методы
Document createDocument(String url);
List<MediaContent> getVideo(Document doc);
List<MediaContent> getImages(Document doc);
List‹ MediaContent> будет потребляться
void appendToRv(List<MediaContent> media);
Мне нравится использовать RxJava2, чтобы
CreateDocument -> getVideo ->
-> appendToRv
-> getImages ->
(также видеовыход следует заказывать перед изображениями).
Как мне это сделать? Я попробовал flatMap, но, похоже, он позволяет использовать только один метод.
Single<List<MediaContent>> single =
Single.fromCallable(() -> createDocument(url))
// . ?? ..
// this is the part i am lost with
// how do i feed document to -> getVideo() and getImage()
// and then merge them back into the subscriber
//
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
single.subscribe(parseImageSubscription);
DisposableSingleObserver
parseImageSubscription = new DisposableSingleObserver<List<MediaContent>>() {
@Override
public void onSuccess(List<MediaContent> media) {
if(media!=null) {
appendToRv(media);
}
}
@Override
public void onError(Throwable error) {
doSnackBar("error loading: '" + q + "'");
}
};
отдельные наблюдаемые для getVideos и getImages
Single<List<MediaContent>> SingleGetImage(Document document ) {
return Single.create(e -> {
List<MediaContent> result = getImage(document);
if (result != null) {
e.onSuccess(result);
}else {
e.onError(new Exception("No images found"));
}
});
}
Single<List<MediaContent>> singleGetVideo(Document document ) {
return Single.create(e -> {
List<MediaContent> result = getVideo( document);
if (result != null) {
e.onSuccess(result);
}else {
e.onError(new Exception("No videos found"));
}
});
}