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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部