RxJava:startWith的用法

startWith的作用是在发射的数据头部添加数据。
测试:
@Testpublic void startWith(){System.out.println("头部添加一个数据------------------");Observable.just(2,3).startWith(1).subscribe(i->{System.out.println(i);});System.out.println("头部添加多个数据------------------");Observable.just(2,3).startWith(0,1).subscribe(i->{System.out.println(i);});System.out.println("头部添加多个数据------------------");List<Integer> list = new ArrayList<>();list.add(0);list.add(1);Observable.just(2,3).startWith(list).subscribe(i->{System.out.println(i);});}
输出:
头部添加一个数据------------------
1
2
3
头部添加多个数据------------------
0
1
2
3
头部添加多个数据------------------
0
1
2
3
查看方法源码:
public final Observable<T> startWith(T t1) {return concat(just(t1), this);
}
内部实际调用的是concat方法,说明凡是concat的特性,startWith也存在。
RxJava:concat(连接)、 concatDelayError、 concatEager的使用
1、串行
这个特性意味着,如果我们给头部的数据源增加延迟,则会无法收到数据。
测试:
@Testpublic void startWithDelay() throws InterruptedException {//延迟3s发射数据Observable<Integer> just = Observable.just(0,1).delay(3, TimeUnit.SECONDS);Observable.just(2,3).startWith(just).subscribe(new Subscriber<Integer>() {@Overridepublic void onCompleted() {System.out.println("StartWith.onCompleted");}@Overridepublic void onError(Throwable e) {System.out.println("StartWith.onError");}@Overridepublic void onNext(Integer integer) {System.out.println("StartWith.onNext");}});//延迟2s结束方法Thread.sleep(2*1000);}
输出:
//没有任何输出
2、OnError的处理
concat有个特殊的方法concatDelayError,使用这个方法时,即使其中一个数据源出现了错误,也不会终止其他数据源的发射。startWith内部没有调用concatDelayError,因此,出现错误时,startWith会终止执行。
@Testpublic void startWithError(){Observable<Integer> just = Observable.just(0,1).doOnNext(new Action1<Integer>() {@Overridepublic void call(Integer integer) {throw new NullPointerException();}});Observable.just(2,3).startWith(just).subscribe(new Subscriber<Integer>() {@Overridepublic void onCompleted() {System.out.println("StartWith.onCompleted");}@Overridepublic void onError(Throwable e) {System.out.println("StartWith.onError");}@Overridepublic void onNext(Integer integer) {System.out.println("StartWith.onNext");}});}
输出:
StartWith.onError
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
