[英]RxJava - Multiple tasks in a observable
I have a list that contain many objects and i will use it as observable, Each object has two url, In each consuming, I should ensure both url downloaded successfully, If one of url did not downloaded, RxJava should be stop the job, I am new in RxJava and i can just do simple works. 我有一个包含许多对象的列表,我将以可观察的方式使用它,每个对象都有两个url,在每次使用时,我都应确保两个url均已成功下载,如果其中一个url未下载,则RxJava应该停止工作,我是RxJava中的新功能,我可以做一些简单的工作。
This is my object 这是我的对象
public class mediaChunk
{
public String audioChunkUrl;
public String videoChunkUrl;
}
List<mediaChunk> list = new ArrayList<>();
one approach would be: 一种方法是:
Observable.fromIterable
factory method to setup the stream from the initial List<MediaChunk>
使用Observable.fromIterable
工厂方法从初始List<MediaChunk>
设置流 flatMap
each emission from that stream and use the Observable.just
factory method to create a stream of audio + video URLs from each MediaChunk
instance flatMap
该流中的每个发射,并使用Observable.just
工厂方法从每个MediaChunk
实例创建音频+视频URL流 the result is a flattened stream of URLs for which subscribers can plug in their own onNext
, onError
, and onComplete
handlers. 结果是URL的扁平化,订阅者可以为其添加自己的onNext
, onError
和onComplete
处理程序。
the code would look something like this: 代码看起来像这样:
Observable.fromIterable(
Arrays.asList(
new MediaChunk("audio-1", "video-1"),
new MediaChunk("audio-2", "video-2"),
new MediaChunk("audio-3", "video-3")
))
.flatMap(chunk -> Observable.just(chunk.audioChunkUrl, chunk.videoChunkUrl))
.subscribe(
value -> {
System.out.println("## onNext(" + value + ")");
},
error -> {
System.out.println("## onError(" + error.getMessage() + ")");
},
() -> {
System.out.println("## onComplete()");
}
);
not sure if this fits the bill, but hopefully it's enough to at least inspire some thought. 不确定是否符合要求,但希望至少足以激发一些想法。
Update - example mapping emissions to Completable
更新-例如映射排放Completable
Observable.fromIterable(
Arrays.asList(
new MediaChunk("audio-1", "video-1"),
new MediaChunk("audio-2", "video-2"),
new MediaChunk("audio-3", "video-3")
))
.flatMap(chunk -> Observable.just(chunk.audioChunkUrl, chunk.videoChunkUrl))
.flatMapCompletable(url -> {
return Completable.fromCallable(() -> {
return "## ...handling network call for [" + url + "]";
});
})
.subscribe(
() -> {
System.out.println("## onComplete()");
},
error -> {
System.out.println("## onError(" + error.getMessage() + ")");
}
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.